axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Anand Raghavendran (JIRA)" <axis-...@ws.apache.org>
Subject [jira] Created: (AXIS-2217) Axis incorrectly adding invalid and extraneous tags when the wsdl imports schema that contains multiple versions of underlying schema elements
Date Wed, 14 Sep 2005 05:46:54 GMT
Axis incorrectly adding invalid and extraneous tags when the wsdl imports schema that contains
multiple versions of underlying schema elements
----------------------------------------------------------------------------------------------------------------------------------------------

         Key: AXIS-2217
         URL: http://issues.apache.org/jira/browse/AXIS-2217
     Project: Apache Axis
        Type: Bug
  Components: Serialization/Deserialization  
    Versions: current (nightly)    
 Environment: Windows-XP Service pack2, J2SDK 1.4.2.08, Compaq nc6000
    Reporter: Anand Raghavendran
    Priority: Critical


We have implemented schema versioning for our services using the schema namespace as version
differntiator.  Please see the following wsdl and schemas:

<wsdl:definitions xmlns:ns2="http://www.abc.com/XYZ/root" xmlns:tns="http://www.abc.com/ContactServicePort/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ns="http://www.abc.com/XYZ"  xmlns:soap = "http://schemas.xmlsoap.org/wsdl/soap/"  xmlns:ns1="http://www.abc.com/XYZ/v1_1"
xmlns:ns3="http://www.abc.com/XYZ/v1_2" xmlns:ns4="http://www.stndforum.org/STD_150" targetNamespace="http://www.abc.com/ContactServicePort/"
name="ContactService">
	<wsdl:types>
		<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.xyz.com/ContactServicePort/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
			<xsd:import namespace="http://www.abc.com/XYZ/root" schemaLocation="http://127.0.0.1:8080/axis/Contact_root.xsd"/>
		</xsd:schema>
	</wsdl:types>
	<wsdl:message name="ContactServiceRequest">
		<wsdl:part name="Contact" element="ns2:ContactRq"/>
	</wsdl:message>
	<wsdl:message name="ContactServiceResponse">
		<wsdl:part name="ContactResults" element="ns2:ContactRs"/>
	</wsdl:message>
	<wsdl:portType name="ContactService">
		<wsdl:operation name="processContact">
			<wsdl:input name="ContactServiceRequest" message="tns:ContactServiceRequest"/>
			<wsdl:output name="ContactServiceResponse" message="tns:ContactServiceResponse"/>
		</wsdl:operation>
	</wsdl:portType>
	<wsdl:binding name = "ContactSOAPBinding"
      type = "tns:ContactService">
      <soap:binding style = "document"
         transport = "http://schemas.xmlsoap.org/soap/http"/>
      <wsdl:operation name = "processContact">
         <soap:operation soapAction = "http://127.0.0.1:8080/axis/services/ContactService"/>
         <wsdl:input name = "ContactServiceRequest">
            <soap:body use = "literal"/>
         </wsdl:input>
         <wsdl:output name = "ContactServiceResponse">
            <soap:body use = "literal"/>
         </wsdl:output>
      </wsdl:operation>
   </wsdl:binding>
   <wsdl:service name = "ContactService">
      <wsdl:port binding = "tns:ContactSOAPBinding"
         name = "ContactServiceSOAPPort">
         <soap:address location = "http://127.0.0.1:8080/axis/services/ContactService"
            xmlns:wsdl = "http://schemas.xmlsoap.org/wsdl/"/>
      </wsdl:port>
   </wsdl:service>
</wsdl:definitions>

<xsd:schema attributeFormDefault="unqualified" 
  elementFormDefault="qualified" 
  targetNamespace="http://www.abc.com/XYZ/root" 
  xmlns:com.abc.root="http://www.abc.com/XYZ/root" 
  xmlns:com.abc="http://www.abc.com/XYZ" 
  xmlns:com.abc.component.v1_2="http://www.abc.com/XYZ/v1_2"
  xmlns:com.abc.component.v1_1="http://www.abc.com/XYZ/v1_1"
  xmlns="http://www.stndforum.org/STD_150" 
  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
	<xsd:import namespace="http://www.abc.com/XYZ" schemaLocation="Contact.xsd"/>
	<xsd:import namespace="http://www.abc.com/XYZ/v1_1" schemaLocation="Contact_V1_1.xsd"/>
	<xsd:import namespace="http://www.abc.com/XYZ/v1_2" schemaLocation="Contact_V1_2.xsd"/>
	<xsd:import namespace="http://www.stndforum.org/STD_150" schemaLocation="Contact_base.xsd"/>
	<xsd:complexType name="ContactRq_Type">
	    <xsd:sequence>
		<xsd:element ref="RqUID"/>
		<xsd:choice>
			<xsd:element ref="com.abc:ContactSearch" minOccurs="0" />
			<xsd:element ref="com.abc.component.v1_1:ContactSearch" minOccurs="0" />
			<xsd:element ref="com.abc.component.v1_2:ContactSearch" minOccurs="0"/>
		</xsd:choice>
	    </xsd:sequence>
	</xsd:complexType>
	<xsd:element name="ContactRq" type="com.abc.root:ContactRq_Type"/>			
	<xsd:complexType name="ContactRs_Type">
	    <xsd:sequence>
		<xsd:element ref="RqUID"/>
		<xsd:choice>
			<xsd:element ref="com.abc:ContactInfo" minOccurs="0"/>
			<xsd:element ref="com.abc.component.v1_1:ContactInfo" minOccurs="0"/>
			<xsd:element ref="com.abc.component.v1_2:ContactInfo" minOccurs="0"/>
		</xsd:choice>
	    </xsd:sequence>
	</xsd:complexType>
	<xsd:element name="ContactRs" type="com.abc.root:ContactRs_Type"/>			
</xsd:schema>

<xsd:schema attributeFormDefault="unqualified" 
  elementFormDefault="qualified" 
  targetNamespace="http://www.abc.com/XYZ" 
  xmlns:com.abc="http://www.abc.com/XYZ" 
  xmlns="http://www.stndforum.org/STD_150" 
  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <xsd:import namespace="http://www.stndforum.org/STD_150" schemaLocation="Contact_base.xsd"/>
   <xsd:complexType name="ContactSearch_Type">
		<xsd:sequence>					
			<xsd:element ref="ContactName" minOccurs="0"/>
		</xsd:sequence>
   </xsd:complexType>
   <xsd:element name="ContactSearch" type="com.abc:ContactSearch_Type"/>
   <xsd:complexType name="ContactInfo_Type">
		<xsd:sequence>
			<xsd:element ref="CSPhoneNum" minOccurs="0" maxOccurs="unbounded"/>
			<xsd:element ref="ContactName" minOccurs="0"/>
			<xsd:element ref="URL" minOccurs="0"/>
		</xsd:sequence>
   </xsd:complexType>
	<xsd:element name="ContactInfo" type="com.abc:ContactInfo_Type"/>
</xsd:schema>

<xsd:schema attributeFormDefault="unqualified" 
  elementFormDefault="qualified" 
  targetNamespace="http://www.abc.com/XYZ/v1_1" 
  xmlns:com.abc.component.v1_1="http://www.abc.com/XYZ/v1_1" 
  xmlns="http://www.stndforum.org/STD_150" 
  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <xsd:import namespace="http://www.stndforum.org/STD_150" schemaLocation="Contact_base.xsd"/>
   <xsd:complexType name="ContactSearch_Type">
	<xsd:sequence>			
	   <xsd:element ref="ContactName"/>
	   <xsd:choice>	
		<xsd:element ref="CSPhoneNum"/>
		<xsd:element ref="Pager"/>
	   </xsd:choice>			
	</xsd:sequence>
   </xsd:complexType>
   <xsd:element name="ContactSearch" type="com.abc.component.v1_1:ContactSearch_Type"/>
   <xsd:complexType name="ContactInfo_Type">
	<xsd:sequence>
		<xsd:element ref="CSPhoneNum" minOccurs="0" maxOccurs="unbounded"/>
		<xsd:element ref="ContactName" minOccurs="0"/>
		<xsd:element ref="Pager" minOccurs="0"/>		
		<xsd:element ref="URL" minOccurs="0"/>
	</xsd:sequence>
   </xsd:complexType>
	<xsd:element name="ContactInfo" type="com.abc.component.v1_1:ContactInfo_Type"/>
</xsd:schema>

<xsd:schema attributeFormDefault="unqualified" 
  elementFormDefault="qualified" 
  targetNamespace="http://www.abc.com/XYZ/v1_2" 
  xmlns:com.abc.component.v1_2="http://www.abc.com/XYZ/v1_2" 
  xmlns="http://www.stndforum.org/STD_150" 
  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <xsd:import namespace="http://www.stndforum.org/STD_150" schemaLocation="Contact_base.xsd"/>
   <xsd:complexType name="ContactSearch_Type">
	<xsd:sequence>			
	   <xsd:element ref="ContactName"/>
	   <xsd:choice>	
		<xsd:element ref="CSPhoneNum"/>
		<xsd:element ref="Pager"/>
		<xsd:element ref="Cell"/>
	   </xsd:choice>			
	</xsd:sequence>
   </xsd:complexType>
   <xsd:element name="ContactSearch" type="com.abc.component.v1_2:ContactSearch_Type"/>
   <xsd:complexType name="ContactInfo_Type">
	<xsd:sequence>
		<xsd:element ref="CSPhoneNum" minOccurs="0" maxOccurs="unbounded"/>
		<xsd:element ref="ContactName" minOccurs="0"/>
		<xsd:element ref="Pager" minOccurs="0"/>
		<xsd:element ref="Cell" minOccurs="0"/>
		<xsd:element ref="URL" minOccurs="0"/>
	</xsd:sequence>
   </xsd:complexType>
	<xsd:element name="ContactInfo" type="com.abc.component.v1_2:ContactInfo_Type"/>
</xsd:schema>

<xsd:schema xmlns="http://www.stndforum.org/STD_150" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.stndforum.org/STD_150" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xsd:element name="URL" type="URL_Type"/>
	<xsd:simpleType name="URL_Type">
		<xsd:restriction base="URL"/>
	</xsd:simpleType>
	<xsd:simpleType name="URL">
		<xsd:restriction base="NC">
			<xsd:maxLength value="1024"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:simpleType name="Pager_Type">
		<xsd:restriction base="NC">
			<xsd:maxLength value="25"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:element name="Pager" type="Pager_Type"/>
	<xsd:simpleType name="Identifier">
		<xsd:restriction base="NC">
			<xsd:maxLength value="36"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:element name="RqUID" type="Identifier"/>
	<xsd:simpleType name="NC">
		<xsd:restriction base="xsd:string"/>
	</xsd:simpleType>
	<xsd:simpleType name="PhoneNumber">
		<xsd:restriction base="xsd:string"/>
	</xsd:simpleType>
	<xsd:element name="CSPhoneNum" type="PhoneNumber"/>
	<xsd:element name="Cell" type="PhoneNumber"/>
	<xsd:simpleType name="ContactName_Type">
		<xsd:restriction base="NC">
			<xsd:maxLength value="40"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:element name="ContactName" type="ContactName_Type"/>
</xsd:schema>

We used document literal message style web services for our deployment.  The wsdl takes ContactRq
as the input message and ContactRs as the output message.    I generated client side side
bindings and the created my test harness.   The test case named ContactService_ServiceTestCase.java
composes and submits a ContactRq request with ContactSearch object.  Here is te test method:


public void test1ContactServiceSOAPPortProcessContact() throws Exception {
        com.abc.www.ContactServicePort.ContactSOAPBindingStub binding;
        try {
            binding = (com.abc.www.ContactServicePort.ContactSOAPBindingStub)
                          new com.abc.www.ContactServicePort.ContactService_ServiceLocator().getContactServiceSOAPPort();
        }
        catch (javax.xml.rpc.ServiceException jre) {
            if(jre.getLinkedCause()!=null)
                jre.getLinkedCause().printStackTrace();
            throw new junit.framework.AssertionFailedError("JAX-RPC ServiceException caught:
" + jre);
        }
        assertNotNull("binding is null", binding);



        // Time out after a minute
        binding.setTimeout(60000);

 try {
			System.out.println("Creating IFX Request");
			com.abc.www.XYZ.root.ContactRq_Type data = new com.abc.www.XYZ.root.ContactRq_Type();
			data.setRqUID("cc6f705c-bc42-4aad-8a05-cced85b8066a");
			com.abc.www.XYZ.ContactSearch_Type search = new com.abc.www.XYZ.ContactSearch_Type();
			data.setContactSearch(search);

			search.setContactName("Test");
            System.out.println("Calling  Contact Service");
            // Test operation
			com.abc.www.XYZ.root.ContactRs_Type value = null;

        	value = binding.processContact(data);
 			System.out.println("Processed  Contact Service");

			System.out.println("UID: " + value.getRqUID());


		} catch (Throwable ex) {
			ex.printStackTrace();
		}

        // TBD - validate results
    }

I setup the tcpmon and trapped the messages going across the wire.  Notice the following tags
in the request XML.  Clearly the serialized XML is incorrect as there are no tags defined
for contactSearch2 and contactSearch3 in any of the schemas:

<contactSearch2 xsi:nil="true"/>
<contactSearch3 xsi:nil="true"/>

The full request is attached below:
<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
   <ContactRq xmlns="http://www.abc.com/XYZ/root">
        <ns1:RqUID xmlns:ns1="http://www.stndforum.org/STD_150">cc6f705c-bc42-4aad-8a05-cced85b8066a</ns1:RqUID>
       <ns2:ContactSearch xsi:type="ns3:ContactSearch_Type" xmlns:ns2="http://www.abc.com/XYZ/v1_2"
xmlns:ns3="http://www.abc.com/XYZ">
                   <ns4:ContactName xmlns:ns4="http://www.stndforum.org/STD_150">Test</ns4:ContactName>
       </ns2:ContactSearch>
      <contactSearch2 xsi:nil="true"/><contactSearch3 xsi:nil="true"/>
</ContactRq>
</soapenv:Body>
</soapenv:Envelope>

Please fix this issue.


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


Mime
View raw message