We have been running into a wall on this problem for about two weeks (everything else in our system works), so I thought I would throw it out to the community. We have created a web service with several operations. One operation returns an XML document that is defined by an XSD associated with a standard. We can not change the XSD for the standard, but can if necessary change our WSDL that references it or the Java code that dynamically constructs the XML payload/SOAP. We use Axis2, the XML Beans tools, and WSDL2Java to generate the Java classes to construct the XML. For this newsgroup, we created a simple example of an XML schema and WSDL (only a simplified version of one operation) that replicates the same problem, but much less complex.
The namespaces in the payload corresponding to the standard need to be as if it was a standalone XML document. 1. SOAP Message The actual SOAP message produced by our system looks like this: <exportDEMOResponse xmlns="http://PolarisWS.ws4.ems.cognitech.com/types" xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"> <return> <EMSDemographicDataSet xsi:schemaLocation="http://www.nemsis.org http://www.nemsis.org/media/XSD/EMSDemographicDataSet.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.nemsis.org"> <D09 Status="A" Date="2007-03-29-07:00" xmlns=""> <D09_04 xmlns="http://www.nemsis.org">Stuff</D09_04> </D09> </EMSDemographicDataSet> </return> </exportDEMOResponse> 2. Desired SOAP Message/XML Document We would like the payload corresponding to Test.xsd (defined later in this message) to look like the following: <EMSDemographicDataSet xsi:schemaLocation="http://www.nemsis.org http://www.nemsis.org/media/XSD/EMSDemographicDataSet.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.nemsis.org"> <D09 Status="A" Date="2007-03-29-07:00"> <D09_04>Stuff</D09_04> </D09> </EMSDemographicDataSet> In other words, we want to get rid of the xmlns="" associated with D09 and the xmlns="http://www.nemsis.org" associated with D09_04. The xmlns="" only occurs when attributes are defined. 3. WSDL Our WSDL looks like this. Note that the elementFormDefault is qualified and the attributeFormDefault is unqualified. WSDL (services.wsdl) <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:ns1="http://PolarisWS.ws4.ems.cognitech.com/types" xmlns:ns="http://PolarisWS.ws4.ems.cognitech.com" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" targetNamespace="http://PolarisWS.ws4.ems.cognitech.com"> <wsdl:types> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:types="http://PolarisWS.ws4.ems.cognitech.com/types" targetNamespace="http://PolarisWS.ws4.ems.cognitech.com/types" elementFormDefault="qualified" attributeFormDefault="unqualified" xmlns:Q1="http://www.nemsis.org"> <xs:import schemaLocation="Test.xsd" namespace="http://www.nemsis.org"> </xs:import> <xs:complexType name="DemographicsPayload"> <xs:sequence> <xs:element ref="Q1:EMSDemographicDataSet" /> </xs:sequence> </xs:complexType> <xs:element name="exportDEMO"> <xs:complexType> <xs:sequence> <xs:element type="xs:string" name="agencyID" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="exportDEMOResponse"> <xs:complexType> <xs:sequence> <xs:element type="types:DemographicsPayload" name="return" /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> </wsdl:types> <wsdl:message name="exportDEMOMessage"> <wsdl:part element="ns1:exportDEMO" name="part1" /> </wsdl:message> <wsdl:message name="exportDEMOResponseMessage"> <wsdl:part element="ns1:exportDEMOResponse" name="part1" /> </wsdl:message> <wsdl:portType name="PolarisWSPortType"> <wsdl:operation name="exportDEMO"> <wsdl:input message="ns:exportDEMOMessage" /> <wsdl:output message="ns:exportDEMOResponseMessage" /> </wsdl:operation> </wsdl:portType> <wsdl:binding type="ns:PolarisWSPortType" name="PolarisWSSOAP11Binding"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="exportDEMO"> <soap:operation style="document" soapAction="urn:exportDEMO" /> <wsdl:input> <soap:body namespace="http://PolarisWS.ws4.ems.cognitech.com" use="literal" /> </wsdl:input> <wsdl:output> <soap:body namespace="http://PolarisWS.ws4.ems.cognitech.com" use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:binding type="ns:PolarisWSPortType" name="PolarisWSSOAP12Binding"> <soap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="exportDEMO"> <soap12:operation style="document" soapAction="urn:exportDEMO" /> <wsdl:input> <soap12:body namespace="http://PolarisWS.ws4.ems.cognitech.com" use="literal" /> </wsdl:input> <wsdl:output> <soap12:body namespace="http://PolarisWS.ws4.ems.cognitech.com" use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="PolarisWS"> <wsdl:port binding="ns:PolarisWSSOAP11Binding" name="PolarisWSSOAP11port"> <soap:address location="http://localhost:8080/axis2/services/PolarisWS" /> </wsdl:port> <wsdl:port binding="ns:PolarisWSSOAP12Binding" name="PolarisWSSOAP12port"> <soap12:address location="http://localhost:8080/axis2/services/PolarisWS" /> </wsdl:port> </wsdl:service> </wsdl:definitions> 4. XSD File Referenced by WSDL Our Test.xsd file is a very simplified version of the standard (about few fields vs. several thousand). Note that the elementFormDefault is qualified and the attributeFormDefault is unqualified. We can not change the actual standard. <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns="http://www.nemsis.org" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.nemsis.org" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:annotation> <xs:appinfo> <schema xmlns="http://www.ascc.net/xml/schematron"> <title>Meds</title> <ns uri="http://www.nemsis.org" prefix="ns"/> <pattern name="Medications"> <rule context="ns:E18"> <assert test="preceding::E18_02"> If <name/> is used you must list the Medications listed </assert> <assert test="preceding::E18_07"> If <name/> is used you must list the patient response </assert> </rule> <rule context="ns:Header"> <report test="count(ns:Record) > 0"> There are <value-of select = "count(ns:Header\Record)"/> <name/> </report> </rule> </pattern> </schema> </xs:appinfo> </xs:annotation> <xs:complexType name="D09" id="MedicalDeviceInformation"> <xs:sequence> <xs:element name="D09_04" type="ModelNumber" minOccurs="0"> <xs:annotation> <xs:documentation>The specific manufacturer's model number associated with medical device.</xs:documentation> </xs:annotation> </xs:element> <xs:element name="D09_05" type="Date" minOccurs="0"> <xs:annotation> <xs:documentation>The year the device was purchased by the EMS agency or the date the status changed.</xs:documentation> </xs:annotation> </xs:element> </xs:sequence> <xs:attributeGroup ref="currentStatus"/> </xs:complexType> <xs:element name="EMSDemographicDataSet"> <xs:annotation> <xs:documentation>Root Tag For Dataset</xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="D09" type="D09" minOccurs="0" maxOccurs="unbounded"> <xs:annotation> <xs:documentation>Section D9 Medical Device Information"</xs:documentation> </xs:annotation> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:attributeGroup name="currentStatus"> <xs:annotation> <xs:documentation>Attribute group used to define the current status of an element value and the date the status was confirmed</xs:documentation> </xs:annotation> <xs:attribute name="Status" type="Status" use="required"/> <xs:attribute name="Date" type="Date" use="required"/> </xs:attributeGroup> <xs:simpleType name="Date"> <xs:annotation> <xs:documentation>The corresponding date</xs:documentation> </xs:annotation> <xs:restriction base="xs:date"> <xs:minInclusive value="1920-01-01"/> <xs:maxInclusive value="2030-01-01"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="DateTime"> <xs:annotation> <xs:documentation>The date/time the injury occurred, or the date/time the symptoms or problem started</xs:documentation> </xs:annotation> <xs:restriction base="xs:dateTime"> <xs:minInclusive value="1990-01-01T00:00:00"/> <xs:maxInclusive value="2030-01-01T00:00:00-05:00"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="ModelNumber"> <xs:annotation> <xs:documentation>The specific manufacturer's model number associated with medical device.</xs:documentation> </xs:annotation> <xs:restriction base="xs:string"> <xs:minLength value="2"/> <xs:maxLength value="50"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="NullDate"> <xs:annotation> <xs:documentation>The corresponding date</xs:documentation> </xs:annotation> <xs:union memberTypes="NullValues"> <xs:simpleType> <xs:restriction base="xs:date"> <xs:minInclusive value="1990-01-01"/> <xs:maxInclusive value="2030-01-01"/> </xs:restriction> </xs:simpleType> </xs:union> </xs:simpleType> <xs:simpleType name="NullValues"> <xs:annotation> <xs:documentation>The Values used to describe Null fieldsd</xs:documentation> </xs:annotation> <xs:restriction base="xs:integer"> <xs:enumeration value="-5"> <xs:annotation> <xs:documentation>Not Available</xs:documentation> </xs:annotation> </xs:enumeration> <xs:enumeration value="-10"> <xs:annotation> <xs:documentation>Not Known</xs:documentation> </xs:annotation> </xs:enumeration> <xs:enumeration value="-15"> <xs:annotation> <xs:documentation>Not Reporting</xs:documentation> </xs:annotation> </xs:enumeration> <xs:enumeration value="-20"> <xs:annotation> <xs:documentation>Not Recorded</xs:documentation> </xs:annotation> </xs:enumeration> <xs:enumeration value="-25"> <xs:annotation> <xs:documentation>Not Applicable</xs:documentation> </xs:annotation> </xs:enumeration> </xs:restriction> </xs:simpleType> <xs:simpleType name="Status"> <xs:annotation> <xs:documentation>The Status either active or inactive</xs:documentation> </xs:annotation> <xs:restriction base="xs:string"> <xs:enumeration value="A"> <xs:annotation> <xs:documentation>Active</xs:documentation> </xs:annotation> </xs:enumeration> <xs:enumeration value="I"> <xs:annotation> <xs:documentation>Inactive</xs:documentation> </xs:annotation> </xs:enumeration> </xs:restriction> </xs:simpleType> </xs:schema> Any help is appreciated. Jerome Soller, PhD President, CogniTech Corporation Salt Lake City, Utah e-mail: [EMAIL PROTECTED] Phone: (801) 322-0101 --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]

