are u using latest nightly? could u please try? thx, dims
On 7/12/06, Marc Gagnon <[EMAIL PROTECTED]> wrote:
I am writing an implementation for the OpenTravel Alliance message PkgAvail. The version is 2006A. I decided to use XMLBeans because it is a mature tool and it is the best supported binding for Axis2. Using vanilla XmlBeans schema compiler works fine (version 2.10). But when using the same message schemas from a WSDL it does not work. The difference I see is that wsdl2java is using apache xmlschema... It is easy to compile the schema using XMLBeans (complete or in parts). For instance, to compile the request and response messages for OTA PkgAvail, simply use this command: scomp -compiler c:\j2sdk1.4.2_12\bin/javac -mx 512m -src src OTA_PkgAvailRQ.xsd OTA_PkgAvailRS.xsd The high level messages use the targetNamespace to set the namespace. By design, all more primitive types are in separated schemas which are included and they do not define a namespace. This is a documented OTA practice: see OTA 2006A, "XML Schema Design Best Practices"version 3.04 June 2006,page 15, section 4.6.2 "No namespace for common XML schema files". The rationale states that the messages which includes simple types will 'coerce' the content in the RQ or RS schema. This looks fine and seems logical. Also, the W3C specification documents this practice. Specifically, the document "XML Schema part 1: Structures" (W3C Recommendation 2 May 201) says the following in section 4.2.1: ===== ... A <schema> information item may contain any number of <include> elements. Their schemaLocation attributes, consisting of a URI reference, identify other ·schema documents·, that is <schema> information items. The ·XML Schema· corresponding to <schema> contains not only the components corresponding to its definition and declaration [children], but also all the components of all the ·XML Schemas· corresponding to any <include>d schema documents. Such included schema documents must either (a) have the same targetNamespace as the <include>ing schema document, or (b) no targetNamespace at all, in which case the <include>d schema document is converted to the <include>ing schema document's targetNamespace. ... ===== So, xsd:include must work from wsdl2java the same as with scomp. And the included schema will be in the OTA's RQ or RS namespace according to the W3C recommendation AND the OTA's best practice guide. The next step for me was to look at the OTA document "Implementation guide: WSDL", version 0.2, 7 June 2006. On page 9 you'll find a sample OTA WSDL for a vehicule RQ/RS service which is pretty close to what I want. I simply used this example WSDL as is... and the fun began. I get an exception and it is related to the fact that there is no namespace in the included simple types. The were some messages about this issue (google groups thread "Use xsd OTA"): Some people said it is bad practice from OTA, which is obviously wrong. Here are some outputs... ==> File OTA_PkgAvailRQ.xsd: (to show you how types are included): <?xml version="1.0" encoding="UTF-8"?> <xs:schema targetNamespace="http://www.opentravel.org/OTA/2003/05" elementFormDefault="qualified" version="3.002" id="OTA2006A" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.opentravel.org/OTA/2003/05"> <xs:include schemaLocation="OTA_PkgCommonTypes.xsd"/> <xs:include schemaLocation="OTA_SimpleTypes.xsd"/> <xs:include schemaLocation="OTA_CommonTypes.xsd"/> ... ==> File OTA_SimpleTypes.xsd: (to show there is no namespace): <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" version="2.002" id="OTA2003A2006A"> <xs:annotation> <xs:documentation xml:lang="en">All Schema files in the OTA specification are made available according to the terms defined by the OTA License Agreement at http://www.opentravel.org/ota_downloads_form.cfm</xs:documentation> </xs:annotation> <xs:simpleType name="ActionType"> <xs:annotation> <xs:documentation xml:lang="en">Identifes an action to take place.</xs:documentation> </xs:annotation> <xs:restriction base="xs:string"> <xs:enumeration value="Add-Update"> <xs:annotation> <xs:documentation xml:lang="en"> Typically used to add an item where it does not exist or to update an item where it does exist. </xs:documentation> </xs:annotation> </xs:enumeration> <xs:enumeration value="Cancel"> <xs:annotation> <xs:documentation xml:lang="en"> Typically used to cancel an existing item. </xs:documentation> </xs:annotation> </xs:enumeration> ... </xs:restriction> </xs:simpleType> ... ====================== This is the OpenTravel Alliance WSDL Implementation Guide version 0.2, 7 June 2006: Example from page 9 (file name OTA_VehResInterface.wsdl): <?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ota="http://www.opentravel.org/OTA/2003/05" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.opentravel.org/OTA/2003/05" name="VehReservationService"> <!-- Define data types (import OTA schemas) --> <wsdl:types> <xs:schema> <xs:import namespace="http://www.opentravel.org/OTA/2003/05" schemaLocation="OTA_VehResRQ.xsd"/> </xs:schema> <xs:schema> <xs:import namespace="http://www.opentravel.org/OTA/2003/05" schemaLocation="OTA_VehResRS.xsd"/> </xs:schema> </wsdl:types> <!-- Define request and response messages--> <wsdl:message name="VehicleReservationRequest"> <wsdl:part name="OTA_VehResRQ" element="ota:OTA_VehResRQ"/> </wsdl:message> <wsdl:message name="VehicleReservationResponse"> <wsdl:part name="OTA_VehResRS" element="ota:OTA_VehResRS"/> </wsdl:message> <!-- Define operation and reference messages--> <wsdl:portType name="VehicleReservationPortType"> <wsdl:operation name="OTA_VehResRQ"> <wsdl:input message="ota:VehicleReservationRequest"/> <wsdl:output message="ota:VehicleReservationResponse"/> </wsdl:operation> </wsdl:portType> </wsdl:definitions> And the binding/service definition WSDL (page 10): <?xml version="1.0" encoding="UTF-8"?> <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:ota="http://www.opentravel.org/OTA/2003/05" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.opentravel.org/OTA/2003/05"> <!-- Import Interface Definition WSDL--> <import namespace="http://www.opentravel.org/OTA/2003/05" location="OTA_VehResInterface.wsdl"/> <!-- Define SOAP binding--> <binding name="VehicleReservationBinding" type="ota:VehicleReservationPortType"> <!-- Use document style and not rpc--> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="OTA_VehResRQ"> <!-- Use 'literal' to include OTA XML as-is--> <soap:operation soapAction="CreateReservation" style="document"/> <input> <soap:body use="literal" namespace="http://www.opentravel.org/OTA/2003/05"/> </input> <output> <soap:body use="literal" namespace="http://www.opentravel.org/OTA/2003/05"/> </output> </operation> </binding> <!-- Define SOAP interface with previously declared binding--> <service name="OTAVehicleReservationService"> <port name="VehicleReservationPort" binding="ota:VehicleReservationBinding"> <!-- Replace "http://mydomain/myservicename" with actual service endpoint--> <soap:address location="http://mydomain/myservicename"/> </port> </service> </definitions> I get an exception while processing the WSDL: wsdl2java -uri vehicule.wsdl Using AXIS2_HOME: c:\JavaLib\axis2-std-1.0_bin Using JAVA_HOME: c:\Program Files\Java\jdk1.5.0_06 Retrieving document at 'OTA_VehResInterface.wsdl', relative to 'file:/C:/workspace/TestOTA/WSDL/'. Retrieving schema at 'OTA_VehResRQ.xsd', relative to 'file:/C:/workspace/TestOTA/WSDL/OTA_VehResInterface.wsdl'. Retrieving schema at 'OTA_VehicleCommonTypes.xsd', relative to 'file:/C:/workspace/TestOTA/WSDL/OTA_VehResRQ.xsd'. Retrieving schema at 'OTA_SimpleTypes.xsd', relative to 'file:/C:/workspace/TestOTA/WSDL/OTA_VehicleCommonTypes.xsd'. Retrieving schema at 'OTA_CommonTypes.xsd', relative to 'file:/C:/workspace/TestOTA/WSDL/OTA_VehicleCommonTypes.xsd'. Retrieving schema at 'OTA_SimpleTypes.xsd', relative to 'file:/C:/workspace/TestOTA/WSDL/OTA_CommonTypes.xsd'. Retrieving schema at 'OTA_AirCommonTypes.xsd', relative to 'file:/C:/workspace/TestOTA/WSDL/OTA_VehicleCommonTypes.xsd'. Retrieving schema at 'OTA_SimpleTypes.xsd', relative to 'file:/C:/workspace/TestOTA/WSDL/OTA_AirCommonTypes.xsd'. Retrieving schema at 'OTA_CommonTypes.xsd', relative to 'file:/C:/workspace/TestOTA/WSDL/OTA_AirCommonTypes.xsd'. Retrieving schema at 'OTA_CommonPrefs.xsd', relative to 'file:/C:/workspace/TestOTA/WSDL/OTA_VehicleCommonTypes.xsd'. Retrieving schema at 'OTA_SimpleTypes.xsd', relative to 'file:/C:/workspace/TestOTA/WSDL/OTA_CommonPrefs.xsd'. Retrieving schema at 'OTA_CommonTypes.xsd', relative to 'file:/C:/workspace/TestOTA/WSDL/OTA_CommonPrefs.xsd'. Retrieving schema at 'OTA_SimpleTypes.xsd', relative to 'file:/C:/workspace/TestOTA/WSDL/OTA_VehResRQ.xsd'. Retrieving schema at 'OTA_CommonTypes.xsd', relative to 'file:/C:/workspace/TestOTA/WSDL/OTA_VehResRQ.xsd'. Retrieving schema at 'OTA_AirCommonTypes.xsd', relative to 'file:/C:/workspace/TestOTA/WSDL/OTA_VehResRQ.xsd'. Retrieving schema at 'OTA_CommonPrefs.xsd', relative to 'file:/C:/workspace/TestOTA/WSDL/OTA_VehResRQ.xsd'. Retrieving schema at 'OTA_VehResRS.xsd', relative to 'file:/C:/workspace/TestOTA/WSDL/OTA_VehResInterface.wsdl'. Retrieving schema at 'OTA_VehicleCommonTypes.xsd', relative to 'file:/C:/workspace/TestOTA/WSDL/OTA_VehResRS.xsd'. Retrieving schema at 'OTA_SimpleTypes.xsd', relative to 'file:/C:/workspace/TestOTA/WSDL/OTA_VehResRS.xsd'. Retrieving schema at 'OTA_CommonTypes.xsd', relative to 'file:/C:/workspace/TestOTA/WSDL/OTA_VehResRS.xsd'. Retrieving schema at 'OTA_AirCommonTypes.xsd', relative to 'file:/C:/workspace/TestOTA/WSDL/OTA_VehResRS.xsd'. Retrieving schema at 'OTA_CommonPrefs.xsd', relative to 'file:/C:/workspace/TestOTA/WSDL/OTA_VehResRS.xsd'. log4j:WARN No appenders could be found for logger (org.apache.axis2.i18n.ProjectResourceBundle). log4j:WARN Please initialize the log4j system properly. Exception in thread "main" org.apache.axis2.wsdl.codegen.CodeGenerationException: Error parsing WSDL at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.<init>(CodeGenerationEngine.java:94) at org.apache.axis2.wsdl.WSDL2Code.main(WSDL2Code.java:32) at org.apache.axis2.wsdl.WSDL2Java.main(WSDL2Java.java:21) Caused by: org.apache.axis2.AxisFault: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.NullPointerException; nested exception is: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.NullPointerException at org.apache.axis2.description.WSDL2AxisServiceBuilder.populateService(WSDL2AxisServiceBuilder.java:243) at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.<init>(CodeGenerationEngine.java:87) ... 2 more Caused by: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.NullPointerException at org.apache.ws.commons.schema.SchemaBuilder.resolveXmlSchema(SchemaBuilder.java:1916) at org.apache.ws.commons.schema.SchemaBuilder.resolveXmlSchema(SchemaBuilder.java:1929) at org.apache.ws.commons.schema.SchemaBuilder.handleImport(SchemaBuilder.java:1714) at org.apache.ws.commons.schema.SchemaBuilder.handleXmlSchemaElement(SchemaBuilder.java:126) at org.apache.ws.commons.schema.XmlSchemaCollection.read(XmlSchemaCollection.java:250) at org.apache.axis2.description.WSDL2AxisServiceBuilder.getXMLSchema(WSDL2AxisServiceBuilder.java:959) at org.apache.axis2.description.WSDL2AxisServiceBuilder.copyExtensibleElements(WSDL2AxisServiceBuilder.java:1067) at org.apache.axis2.description.WSDL2AxisServiceBuilder.populateService(WSDL2AxisServiceBuilder.java:221) ... 3 more Caused by: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.NullPointerException at org.apache.ws.commons.schema.SchemaBuilder.resolveXmlSchema(SchemaBuilder.java:1916) at org.apache.ws.commons.schema.SchemaBuilder.handleInclude(SchemaBuilder.java:1746) at org.apache.ws.commons.schema.SchemaBuilder.handleXmlSchemaElement(SchemaBuilder.java:121) at org.apache.ws.commons.schema.SchemaBuilder.build(SchemaBuilder.java:53) at org.apache.ws.commons.schema.XmlSchemaCollection.read(XmlSchemaCollection.java:255) at org.apache.ws.commons.schema.XmlSchemaCollection.read(XmlSchemaCollection.java:217) at org.apache.ws.commons.schema.SchemaBuilder.resolveXmlSchema(SchemaBuilder.java:1911) ... 10 more Caused by: java.lang.RuntimeException: java.lang.NullPointerException at org.apache.ws.commons.schema.SchemaBuilder.resolveXmlSchema(SchemaBuilder.java:1916) at org.apache.ws.commons.schema.SchemaBuilder.handleInclude(SchemaBuilder.java:1746) at org.apache.ws.commons.schema.SchemaBuilder.handleXmlSchemaElement(SchemaBuilder.java:121) at org.apache.ws.commons.schema.SchemaBuilder.build(SchemaBuilder.java:53) at org.apache.ws.commons.schema.XmlSchemaCollection.read(XmlSchemaCollection.java:255) at org.apache.ws.commons.schema.XmlSchemaCollection.read(XmlSchemaCollection.java:217) at org.apache.ws.commons.schema.SchemaBuilder.resolveXmlSchema(SchemaBuilder.java:1911) ... 16 more Caused by: java.lang.NullPointerException at org.apache.ws.commons.schema.SchemaBuilder.handleSimpleType(SchemaBuilder.java:343) at org.apache.ws.commons.schema.SchemaBuilder.handleSimpleType(SchemaBuilder.java:477) at org.apache.ws.commons.schema.SchemaBuilder.handleXmlSchemaElement(SchemaBuilder.java:104) at org.apache.ws.commons.schema.SchemaBuilder.build(SchemaBuilder.java:53) at org.apache.ws.commons.schema.XmlSchemaCollection.read(XmlSchemaCollection.java:255) at org.apache.ws.commons.schema.XmlSchemaCollection.read(XmlSchemaCollection.java:217) at org.apache.ws.commons.schema.SchemaBuilder.resolveXmlSchema(SchemaBuilder.java:1911) ... 22 more The problem happens in org.apache.ws.commons.schema.SchemaBuilder.handleSimpleType: ... if (restrictionEl.hasAttribute("base")) { String name = restrictionEl.getAttribute("base"); String[] temp = Tokenizer.tokenize(name, ":"); String namespace = ""; if (temp.length != 1) { namespace = temp[0]; } //let it crash because its mean being refered //to unregistered namespace (a) namespace = schema.namespaces.get(namespace).toString(); name = Tokenizer.lastToken(name, ":")[1]; restriction.baseTypeName = new QName(namespace, name); ... The namespace="" and the schema to which the code refers is the included one (it defines ws=http://www.w3.org/2001/XMLSchema). So, the get(namespace) at (a) returns null and we get a NPE right after. There is definitely a difference between schema handling in scomp and using WSDL2Java when it comes to "include" directives. To me, the problem is in the apache commons schema component. I used the version packaged with Axis2 1.0 : XmlSchema-1.0.2 I also tried with the latest release: 1.0.3 and got the same exception. I saw no wiki, jira, or other mecanism to report bugs for this project (looking at http://ws.apache.org/commons/XmlSchema/index.html): any idea? I would appreciate if we can identify a few OTA schema users in this list so we can exchange ideas and fix this problem. Then, we should report our results, our successes, to the OTA Google group implementers forum: that would give some visibility for Axis2. One posting on this forum mentioned an interoperability project to test various open source frameworks with OTA schemas and WSDL. I hope we can make it work so that Axis2 can be judged as good framework for OTA-related projects. The first thing I would like to see is someone who would try the same steps I have done so far, and we'll work on a solution from there. _____________________________________________________________ Obtenez aussi votre adresse electronique gratuite de Quebecemail.com http://www.quebecemail.com, un service gratuit et permanent.
-- Davanum Srinivas : http://www.wso2.net (Oxygen for Web Service Developers) --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]