2011-04-19 111 views
5

我使用Axis2 1.5.1(wsdl2java)从给定的WSDL文件生成代码(客户端存根)。
web服务由外部应用程序提供。 RemoteApplication0.xsd的来自WSDL的代码生成导致异常

<?xml version="1.0" encoding="utf-8"?> 
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility- 1.0.xsd" 
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"    
xmlns:tns="http://tempuri.org/" 
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"  
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" 
xmlns:i0="http://schemas.microsoft.com/ws/2005/02/mex/bindings" 
xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" 
xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" 
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" 
xmlns:wsa10="http://www.w3.org/2005/08/addressing" 
xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" 
name="service" targetNamespace="http://tempuri.org/" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> 
<wsdl:types> 
<xsd:schema targetNamespace="http://tempuri.org/Imports"> 
<xsd:include schemaLocation="SampleApp.App.ApplicationManager.RemoteApplication0.xsd" /> 
<xsd:include schemaLocation="SampleApp.App.ApplicationManager.RemoteApplication1.xsd" /> 
<xsd:include schemaLocation="SampleApp.App.ApplicationManager.RemoteApplication2.xsd" /> 
<xsd:include schemaLocation="SampleApp.App.ApplicationManager.RemoteApplication3.xsd" /> 
</xsd:schema> 
</wsdl:types> 
... 
</wsdl:definition> 

内容如下:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns:tns="http://schemas.microsoft.com/Message" 
elementFormDefault="qualified" 
targetNamespace="http://schemas.microsoft.com/Message" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
<xs:complexType name="MessageBody"> 
<xs:sequence> 
<xs:any minOccurs="0" maxOccurs="unbounded" namespace="##any" /> 
</xs:sequence> 
</xs:complexType> 
</xs:schema> 

命令行:

wsdl2java -ss -g -d adb -or -p com.sampleapp.ws.generated.client -uri SampleRemoteProcess.wsdl 

代过程导致异常。
堆栈跟踪:

Using AXIS2_HOME: C:\develop\axis2-1.5.1-bin\axis2-1.5.1\ 
Using JAVA_HOME: C:\Program Files\Java\jdk1.6.0_21 
Retrieving document at 'C:\temp\SampleRemoteProcess.wsdl'. 
Retrieving schema at 'SampleApp.App.ApplicationManager.RemoteApplication0.xsd', relative to 'file:/C:/temp/SampleRemoteProcess.wsdl'. 
Retrieving schema at 'SampleApp.App.ApplicationManager.RemoteApplication1.xsd', relative to 'file:/C:/temp/SampleRemoteProcess.wsdl'. 
Retrieving schema at 'SampleApp.App.ApplicationManager.RemoteApplication2.xsd', relative to 'file:/C:/temp/SampleRemoteProcess.wsdl'. 
Retrieving schema at 'SampleApp.App.ApplicationManager.RemoteApplication3.xsd', relative to 'file:/C:/temp/SampleRemoteProcess.wsdl'. 
[ERROR] org.apache.ws.commons.schema.XmlSchemaException: 

An included schema was announced to have the default target namespace 
or the target namespace http://tempuri.org/Imports, 
but has the target namespace http://schemas.microsoft.com/Message 
java.lang.RuntimeException: org.apache.ws.commons.schema.XmlSchemaException: 
An included schema was announced to have the default target namespace 
or the target namespace http://tempuri.org/Imports, but has the target namespace http://schemas.microsoft.com/Message 
at org.apache.ws.commons.schema.SchemaBuilder.resolveXmlSchema(SchemaBuilder.java:1904) 
at org.apache.ws.commons.schema.SchemaBuilder.resolveXmlSchema(SchemaBuilder.java:1927) 
at org.apache.ws.commons.schema.SchemaBuilder.handleInclude(SchemaBuilder.java:1653) 
at org.apache.ws.commons.schema.SchemaBuilder.handleXmlSchemaElement(SchemaBuilder.java:219) 
at org.apache.ws.commons.schema.XmlSchemaCollection.read(XmlSchemaCollection.java:433) 
at org.apache.axis2.description.WSDLToAxisServiceBuilder.getXMLSchema(WSDLToAxisServiceBuilder.java:144) 
at org.apache.axis2.description.WSDL11ToAxisServiceBuilder.copyExtensibleElements(WSDL11ToAxisServiceBuilder.java:2319) 
at org.apache.axis2.description.WSDL11ToAxisServiceBuilder.processTypes(WSDL11ToAxisServiceBuilder.java:413) 
at org.apache.axis2.description.WSDL11ToAxisServiceBuilder.processTypes(WSDL11ToAxisServiceBuilder.java:402) 
at org.apache.axis2.description.WSDL11ToAxisServiceBuilder.populateService(WSDL11ToAxisServiceBuilder.java:346) 
at org.apache.axis2.description.WSDL11ToAllAxisServicesBuilder.populateAllServices(WSDL11ToAllAxisServicesBuilder.java:107) 
at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.(CodeGenerationEngine.java:147) 
at org.apache.axis2.wsdl.WSDL2Code.main(WSDL2Code.java:35) 
at org.apache.axis2.wsdl.WSDL2Java.main(WSDL2Java.java:24) 
Caused by: org.apache.ws.commons.schema.XmlSchemaException: 
An included schema was announced to have the default target namespace 
or the target namespace http://tempuri.org/Imports 
but has the target namespace http://schemas.microsoft.com/Message 
at org.apache.ws.commons.schema.SchemaBuilder$2.validate(SchemaBuilder.java:1679) 
at org.apache.ws.commons.schema.SchemaBuilder.setNamespaceAttributes(SchemaBuilder.java:369) 
at org.apache.ws.commons.schema.SchemaBuilder.handleXmlSchemaElement(SchemaBuilder.java:134) 
at org.apache.ws.commons.schema.SchemaBuilder.build(SchemaBuilder.java:121) 
at org.apache.ws.commons.schema.XmlSchemaCollection.read(XmlSchemaCollection.java:445) 
at org.apache.ws.commons.schema.XmlSchemaCollection.read(XmlSchemaCollection.java:368) 
at org.apache.ws.commons.schema.SchemaBuilder.resolveXmlSchema(SchemaBuilder.java:1898) 
... 13 more 

Exception in thread "main" org.apache.axis2.wsdl.codegen.CodeGenerationException: Error parsing WSDL 
at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.(CodeGenerationEngine.java:153) 
at org.apache.axis2.wsdl.WSDL2Code.main(WSDL2Code.java:35) 
at org.apache.axis2.wsdl.WSDL2Java.main(WSDL2Java.java:24) 
Caused by: org.apache.axis2.AxisFault: 
org.apache.ws.commons.schema.XmlSchemaException: 
An included schema was announced to have the default target namespace 
or the target namespace http://tempuri.org/Imports, 
but has the target namespace http://schemas.microsoft.com/Message 
at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430) 
at org.apache.axis2.description.WSDL11ToAxisServiceBuilder.populateService(WSDL11ToAxisServiceBuilder.java:396) 
at org.apache.axis2.description.WSDL11ToAllAxisServicesBuilder.populateAllServices(WSDL11ToAllAxisServicesBuilder.java:107) 
at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.(CodeGenerationEngine.java:147) 
... 2 more  

Caused by: java.lang.RuntimeException: 
org.apache.ws.commons.schema.XmlSchemaException: 
An included schema was announced to have the default target namespace 
or the target namespace http://tempuri.org/Imports, 
but has the target namespace http://schemas.microsoft.com/Message 
at org.apache.ws.commons.schema.SchemaBuilder.resolveXmlSchema(SchemaBuilder.java:1904) 
at org.apache.ws.commons.schema.SchemaBuilder.resolveXmlSchema(SchemaBuilder.java:1927) 
at org.apache.ws.commons.schema.SchemaBuilder.handleInclude(SchemaBuilder.java:1653) 
at org.apache.ws.commons.schema.SchemaBuilder.handleXmlSchemaElement(SchemaBuilder.java:219) 
at org.apache.ws.commons.schema.XmlSchemaCollection.read(XmlSchemaCollection.java:433) 
at org.apache.axis2.description.WSDLToAxisServiceBuilder.getXMLSchema(WSDLToAxisServiceBuilder.java:144) 
at org.apache.axis2.description.WSDL11ToAxisServiceBuilder.copyExtensibleElements(WSDL11ToAxisServiceBuilder.java:2319) 
at org.apache.axis2.description.WSDL11ToAxisServiceBuilder.processTypes(WSDL11ToAxisServiceBuilder.java:413) 
at org.apache.axis2.description.WSDL11ToAxisServiceBuilder.processTypes(WSDL11ToAxisServiceBuilder.java:402) 
at org.apache.axis2.description.WSDL11ToAxisServiceBuilder.populateService(WSDL11ToAxisServiceBuilder.java:346) 
... 4 more 

An included schema was announced to have the default target namespace 
or the target namespace http://tempuri.org/Imports, 
but has the target namespace http://schemas.microsoft.com/Message 
at org.apache.ws.commons.schema.SchemaBuilder$2.validate(SchemaBuilder.java:1679) 
at org.apache.ws.commons.schema.SchemaBuilder.setNamespaceAttributes(SchemaBuilder.java:369) 
at org.apache.ws.commons.schema.SchemaBuilder.handleXmlSchemaElement(SchemaBuilder.java:134) 
at org.apache.ws.commons.schema.SchemaBuilder.build(SchemaBuilder.java:121) 
at org.apache.ws.commons.schema.XmlSchemaCollection.read(XmlSchemaCollection.java:445) 
at org.apache.ws.commons.schema.XmlSchemaCollection.read(XmlSchemaCollection.java:368) 
at org.apache.ws.commons.schema.SchemaBuilder.resolveXmlSchema(SchemaBuilder.java:1898) 
... 13 more 

似乎有一个命名空间的问题,但我不知道如何解决它。
有人可以给我一个提示!

回答

0

错误消息是非常具有描述性的:在另一个架构中编辑的架构始终需要具有与导入架构相同的目标名称空间。在文件RemoteApplication0.xsd中,您必须将目标名称空间http://schemas.microsoft.com/Message更改为http://tempuri.org/Imports

+0

我已经试过了!但我仍然得到一个例外: 包含的架构宣布具有默认目标名称空间或 目标名称空间http://tempuri.org/Imports, 但具有目标名称空间http://tempuri.org/ – ak75 2011-04-20 12:07:40

+0

所以?这是相同的错误。你必须提供'http:// tempuri.org/Imports',__not__' http:// tempuri.org'或类似的东西。 – musiKk 2011-04-20 12:23:44

+0

我确实使用过'http:// tempuri.org/Imports'!但是异常消息是'http:// tempuri.org /'。我完全困惑! – ak75 2011-04-20 13:22:08

3

问题是你使用“include”。 “包含”编辑模式必须具有相同的目标名称空间作为包含驻留的模式(您实质上将多个文件中的相同名称空间分开)。您必须“导入”模式才能使用另一个模式文件,其中包含目标名称空间的另一个不同