Code generation from WSDL causes exception

北慕城南 提交于 2020-01-02 04:24:07

问题


I'm using Axis2 1.5.1 (wsdl2java) for code generation (client stubs) from a given WSDL file.
The webservice is provided by an external application.

<?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>  

Content of RemoteApplication0.xsd is as follows:

<?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>  

commandline:

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

Generation process causes an exception.
stacktrace:

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  

Seems there is a namespace problem, but i dont know how to fix it.
Can anybody give me a hint!


回答1:


the problem is your use of "include". "include"ed schemas must have the same target namespace as the schema in which the include resides (you are esentially splitting the same namespace across multiple files). you must "import" a schema to use another schema file with a different target namespace.




回答2:


The error message is pretty descriptive: A schema that is <include>'ed in another schema always needs to have the same target namespace as the importing schema. In the file RemoteApplication0.xsd you have to change the target namespace http://schemas.microsoft.com/Message to http://tempuri.org/Imports.



来源:https://stackoverflow.com/questions/5718588/code-generation-from-wsdl-causes-exception

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!