axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jerome Soller (JIRA)" <j...@apache.org>
Subject [jira] Created: (AXIS2-2488) Bug on Namespaces, xmlns=""
Date Mon, 09 Apr 2007 19:21:32 GMT
Bug on Namespaces, xmlns=""
---------------------------

                 Key: AXIS2-2488
                 URL: https://issues.apache.org/jira/browse/AXIS2-2488
             Project: Axis 2.0 (Axis2)
          Issue Type: Bug
    Affects Versions: 1.2
         Environment: Same behavior on both Windows and Linux servers.  Tomcat 5.0 is our
app server.  
            Reporter: Jerome Soller


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

1. XML Constructed
The XML constructed by XMLBeans before its return is as follows:
<exportDEMOResponse
xmlns="http://PolarisWS.ws4.ems.cognitech.com/types">

  <return>
    <nem: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:nem="http://www.nemsis.org">
      <nem:D09 Status="A" Date="2007-04-04-06:00">
        <nem:D09_04>Stuff</nem:D09_04>
      </nem:D09>
    </nem:EMSDemographicDataSet>
  </return>
</exportDEMOResponse>

2. SOAP Message
The actual SOAP message received by the web services client (simple
example) 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>



3. Desired SOAP Message/XML Document
We would like the payload corresponding to Test.xsd (defined later in this
message) to look something 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.


4. WSDL
Our WSDL looks like this.  Note that the elementFormDefault is qualified
and the attributeFormDefault is unqualified.  We can change the WSDL if
that would fix the problem.
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>


5. 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 XSD standard, but we can change the WSDL.

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

6. Source Code:
public com.cognitech.ems.ws4.polarisws.types.ExportDEMOResponseDocument
exportDEMO
                  (
          com.cognitech.ems.ws4.polarisws.types.ExportDEMODocument param32
          )

           {
        	ExportDEMOResponseDocument DEMOResponseDocument = null;
       	 	ExportDEMO exportDemo = param32.getExportDEMO();
       	 	String agencyID = exportDemo.getAgencyID();


         EMSDemographicDataSet emsDemographicDataSet =
                EMSDemographicDataSet.Factory.newInstance();
         D09[] d09Array = new D09[1];
         D09 d09 = D09.Factory.newInstance();
         String d0904 = "Stuff";
         d09.setD0904(d0904);
         Enum status = Enum.forString("A");
         Calendar date = Calendar.getInstance();
         d09.setStatus(status);
         d09.setDate(date);
         d09Array[0] = d09;
         emsDemographicDataSet.setD09Array(d09Array);
         if (emsDemographicDataSet != null) {
             XmlCursor c = emsDemographicDataSet.newCursor();
             c.toNextToken();
             String schemaLocationURL =
                     "http://www.nemsis.org/media/XSD/EMSDemographicDataSet.xsd";
             String namespace = "http://www.nemsis.org";
             c.insertNamespace("xsi",
"http://www.w3.org/2001/XMLSchema-instance");
             c.insertAttributeWithValue(new
                     QName("http://www.w3.org/2001/XMLSchema-instance",
                     "schemaLocation", "xsi"),
                     namespace + " " + schemaLocationURL);
             DemographicsPayload DEMOPayload =
                     DemographicsPayload.Factory.newInstance();
             DEMOPayload.setEMSDemographicDataSet(emsDemographicDataSet);
             ExportDEMOResponseDocument.ExportDEMOResponse
exportDEMOResponse =
                     ExportDEMOResponseDocument.ExportDEMOResponse.Factory.newInstance();
             exportDEMOResponse.setReturn(DEMOPayload);
             //System.out.println("\n DemoPayload: " +
DEMOPayload.xmlText(xo));
             DEMOResponseDocument =
ExportDEMOResponseDocument.Factory.newInstance();
             DEMOResponseDocument.setExportDEMOResponse(exportDEMOResponse);


             XmlOptions xo = new XmlOptions().setSavePrettyPrint();

            	 xo.setUseDefaultNamespace();
              ArrayList errors = new ArrayList();
              xo.setErrorListener(errors);

             System.out.println("\nEMSMOD: " +
DEMOResponseDocument.xmlText(xo));
             if (!DEMOResponseDocument.validate(xo)) {
                 for (int i = 0; i < errors.size(); i++) {
                	 System.out.println("Validation error");
                 }
             }

       	 	System.out.println("Done with the server-side version");


    }

          return (DEMOResponseDocument);
          }

7. services.xml file
This can be posted if necessary

Jerome Soller, PhD
President, CogniTech Corporation
Salt Lake City, Utah
e-mail: soller@cognitech-ut.com
Phone: (801) 322-0101

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org


Mime
View raw message