5

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!

ak75
  • 123
  • 1
  • 2
  • 4

2 Answers2

3

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.

jtahlborn
  • 52,909
  • 5
  • 76
  • 118
0

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.

musiKk
  • 14,751
  • 4
  • 55
  • 82
  • I already tried it! But i still get an exception: 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://tempuri.org/ – ak75 Apr 20 '11 at 12:07
  • So? This is the same error. You have to provide `http://tempuri.org/Imports`, __not__ `http://tempuri.org` or something similar. – musiKk Apr 20 '11 at 12:23
  • I did use `http://tempuri.org/Imports`! But the exception message is `http://tempuri.org/`. I'm totally confused! – ak75 Apr 20 '11 at 13:22
  • Me too. Could you try with `wsimport` (comes with every JDK) instead of `wsdl2java`? If there still is some error, maybe you could update your question. I don't know why parts of a namespace should be stripped. – musiKk Apr 20 '11 at 13:32
  • @jtahlborn: You are right (and it took a while till somebody found out) and I edited the answer accordingly. – musiKk Jul 01 '11 at 13:44