> I have searched for this topic in all the Axis mailing lists in vain. > What it seems strange to me is that nobody har risen this issue > previously. > So may be I am missisng something out... > > I have the following problem. > I have deployed a webservice via Axis 1.1 and my client runs in .NET > environment. > I also use TCPMON to monitor the traffic between my server and the client. > My webservice exposes several methods that takes a number of parameters. > The problem arises when some of the parameters in a method call have null > values. > Via TCPMON I can see that parameters with null values are omitted in the > outgoing SOAP request. > What happens then is that Axis loses the real order of the method > parameters and tries to cast them according to order specified the wsdl > file. > In best case there woulbe be an answer like that: > <soapenv:Fault> > <faultcode>soapenv:Server.userException</faultcode> > <faultstring>org.xml.sax.SAXException: Bad types (class > [Ljava.lang.Object; -> class java.lang.String)</faultstring> > <detail/> > </soapenv:Fault> > > In the worst case the cast might succeed and and your request would be > processed but the response would not be what you expected... > > However, if I manually manipulate the SOAP request by adding > <parameterX xsi:nil="true"></parameterX> > and I preserve the order of the method parameters then everything works > fine, i.e. Axis recives a null paramater and processes it as it should. > Axis just looks at the order of the parameters, not at their names. > > The Soap 1.1 specification says: > "A NULL value or a default value MAY be represented by omission of the > accessor element. A NULL value MAY also be indicated by an accessor > element containing the attribute xsi:null with value '1' or possibly other > application-dependent attributes and values." > Is this the cause of the problem - the .Net and Axis have chosen different > implementations of the SOAP standard? > Is there a way to specify in the wsdl file that the parameters that some > of the prameters might be null. > What is the best way to send null values? > > Regards > / Daniel > > > Here come some relevant attachements: > > > <<SoapPKCS7.wsdl>> > > <?xml version="1.0" encoding="utf-8"?> > <definitions xmlns:s1="http://127.0.0.1:8080/services/SoapPKCS7" > xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" > xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" > xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:s0="urn:StringPair" > xmlns:s3="http://common.webservices.layer6.tss.aus.teleca.com" > xmlns:s2="urn:PropertyObject" xmlns:s4="urn:SoapPKCS7ResultSet" > xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" > xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" > xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" > targetNamespace="http://127.0.0.1:8080/services/SoapPKCS7" > xmlns="http://schemas.xmlsoap.org/wsdl/"> > <types> > <s:schema targetNamespace="urn:StringPair"> > <s:import namespace="http://schemas.xmlsoap.org/soap/encoding/" /> > <s:complexType name="StringPair"> > <s:sequence> > <s:element name="leftString" nillable="true" type="s:string" /> > <s:element name="rightString" nillable="true" type="s:string" /> > </s:sequence> > </s:complexType> > </s:schema> > <s:schema targetNamespace="http://127.0.0.1:8080/services/SoapPKCS7"> > <s:import namespace="http://schemas.xmlsoap.org/soap/encoding/" /> > <s:complexType name="ArrayOf_tns2_StringPair"> > <s:complexContent mixed="false"> > <s:restriction base="soapenc:Array"> > <s:attribute d7p1:arrayType="s0:StringPair[]" > ref="soapenc:arrayType" xmlns:d7p1="http://schemas.xmlsoap.org/wsdl/" /> > </s:restriction> > </s:complexContent> > </s:complexType> > <s:complexType name="ArrayOf_xsd_dateTime"> > <s:complexContent mixed="false"> > <s:restriction base="soapenc:Array"> > <s:attribute d7p1:arrayType="s:dateTime[]" > ref="soapenc:arrayType" xmlns:d7p1="http://schemas.xmlsoap.org/wsdl/" /> > </s:restriction> > </s:complexContent> > </s:complexType> > <s:complexType name="ArrayOf_xsd_string"> > <s:complexContent mixed="false"> > <s:restriction base="soapenc:Array"> > <s:attribute d7p1:arrayType="s:string[]" > ref="soapenc:arrayType" xmlns:d7p1="http://schemas.xmlsoap.org/wsdl/" /> > </s:restriction> > </s:complexContent> > </s:complexType> > </s:schema> > <s:schema targetNamespace="urn:PropertyObject"> > <s:import namespace="http://schemas.xmlsoap.org/soap/encoding/" /> > <s:complexType name="PropertyObject"> > <s:sequence> > <s:element name="stringPairs" nillable="true" > type="s1:ArrayOf_tns2_StringPair" /> > <s:element name="valueDateArray" nillable="true" > type="s1:ArrayOf_xsd_dateTime" /> > <s:element name="valueStringArray" nillable="true" > type="s1:ArrayOf_xsd_string" /> > <s:element name="valueDate" nillable="true" type="s:dateTime" /> > </s:sequence> > </s:complexType> > </s:schema> > <s:schema > targetNamespace="http://common.webservices.layer6.tss.aus.teleca.com"> > <s:import namespace="http://schemas.xmlsoap.org/soap/encoding/" /> > <s:complexType name="SoapResultObject"> > <s:sequence> > <s:element name="extractedProperties" nillable="true" > type="s2:PropertyObject" /> > <s:element name="resultCode" type="s:int" /> > <s:element name="resultMessage" nillable="true" type="s:string" > /> > <s:element name="transactionId" nillable="true" type="s:string" > /> > </s:sequence> > </s:complexType> > </s:schema> > <s:schema targetNamespace="urn:SoapPKCS7ResultSet"> > <s:import namespace="http://schemas.xmlsoap.org/soap/encoding/" /> > <s:complexType name="SoapPKCS7ResultSet"> > <s:complexContent mixed="false"> > <s:extension base="s3:SoapResultObject"> > <s:sequence> > <s:element name="contentData" type="s:base64Binary" /> > <s:element name="pkcs7SignedData" type="s:base64Binary" /> > </s:sequence> > </s:extension> > </s:complexContent> > </s:complexType> > </s:schema> > </types> > <message name="verifyPKCS7SignedDataRequest"> > <part name="signedDataBase64" type="s:string" /> > <part name="propertiesToExtract" type="s1:ArrayOf_xsd_string" /> > <part name="serviceAlias" type="s:string" /> > <part name="customPolicy" type="s1:ArrayOf_tns2_StringPair" /> > <part name="transactionId" type="s:string" /> > </message> > <message name="extractPKCS7PropertiesRequest"> > <part name="signedDataBase64" type="s:string" /> > <part name="propertiesToExtract" type="s1:ArrayOf_xsd_string" /> > <part name="transactionId" type="s:string" /> > </message> > <message name="verifyPKCS7SignedDataResponse"> > <part name="verifyPKCS7SignedDataReturn" type="s4:SoapPKCS7ResultSet" > /> > </message> > <message name="createPKCS7SignedDataRequest"> > <part name="contentDataBase64" type="s:string" /> > <part name="keyPairAlias" type="s:string" /> > <part name="timestamp" type="s:string" /> > <part name="serviceAlias" type="s:string" /> > <part name="customPolicy" type="s1:ArrayOf_tns2_StringPair" /> > <part name="transactionId" type="s:string" /> > </message> > <message name="extractPKCS7PropertiesResponse"> > <part name="extractPKCS7PropertiesReturn" type="s4:SoapPKCS7ResultSet" > /> > </message> > <message name="createPKCS7SignedDataResponse"> > <part name="createPKCS7SignedDataReturn" type="s4:SoapPKCS7ResultSet" > /> > </message> > <portType name="SoapPKCS7"> > <operation name="verifyPKCS7SignedData" > parameterOrder="signedDataBase64 propertiesToExtract serviceAlias > customPolicy transactionId"> > <input name="verifyPKCS7SignedDataRequest" > message="s1:verifyPKCS7SignedDataRequest" /> > <output name="verifyPKCS7SignedDataResponse" > message="s1:verifyPKCS7SignedDataResponse" /> > </operation> > <operation name="extractPKCS7Properties" > parameterOrder="signedDataBase64 propertiesToExtract transactionId"> > <input name="extractPKCS7PropertiesRequest" > message="s1:extractPKCS7PropertiesRequest" /> > <output name="extractPKCS7PropertiesResponse" > message="s1:extractPKCS7PropertiesResponse" /> > </operation> > <operation name="createPKCS7SignedData" > parameterOrder="contentDataBase64 keyPairAlias timestamp serviceAlias > customPolicy transactionId"> > <input name="createPKCS7SignedDataRequest" > message="s1:createPKCS7SignedDataRequest" /> > <output name="createPKCS7SignedDataResponse" > message="s1:createPKCS7SignedDataResponse" /> > </operation> > </portType> > <binding name="SoapPKCS7SoapBinding" type="s1:SoapPKCS7"> > <soap:binding transport="http://schemas.xmlsoap.org/soap/http" > style="rpc" /> > <operation name="verifyPKCS7SignedData"> > <soap:operation soapAction="" /> > <input name="verifyPKCS7SignedDataRequest"> > <soap:body use="encoded" > namespace="http://soappkcs7.webservices.layer6.tss.aus.teleca.com" > encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" /> > </input> > <output name="verifyPKCS7SignedDataResponse"> > <soap:body use="encoded" > namespace="http://127.0.0.1:8080/services/SoapPKCS7" > encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" /> > </output> > </operation> > <operation name="extractPKCS7Properties"> > <soap:operation soapAction="" /> > <input name="extractPKCS7PropertiesRequest"> > <soap:body use="encoded" > namespace="http://soappkcs7.webservices.layer6.tss.aus.teleca.com" > encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" /> > </input> > <output name="extractPKCS7PropertiesResponse"> > <soap:body use="encoded" > namespace="http://127.0.0.1:8080/services/SoapPKCS7" > encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" /> > </output> > </operation> > <operation name="createPKCS7SignedData"> > <soap:operation soapAction="" /> > <input name="createPKCS7SignedDataRequest"> > <soap:body use="encoded" > namespace="http://soappkcs7.webservices.layer6.tss.aus.teleca.com" > encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" /> > </input> > <output name="createPKCS7SignedDataResponse"> > <soap:body use="encoded" > namespace="http://127.0.0.1:8080/services/SoapPKCS7" > encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" /> > </output> > </operation> > </binding> > <service name="SoapPKCS7Service"> > <port name="SoapPKCS7" binding="s1:SoapPKCS7SoapBinding"> > <soap:address location="http://127.0.0.1:8080/services/SoapPKCS7" /> > </port> > </service> > </definitions> > > > > __________________________________________________________________________ > ____________________________________________________ > > A SOAP request where the called method is createPKCS7SignedData and the > parameter timestamp=null. > As you acan see the timnestamp is not included in the SOAP request. > > <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" > xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" > xmlns:tns="http://127.0.0.1:8080/services/SoapPKCS7" > xmlns:types="http://127.0.0.1:8080/services/SoapPKCS7/encodedTypes" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xmlns:xsd="http://www.w3.org/2001/XMLSchema"> > <soap:Body > soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> > <q1:createPKCS7SignedData > xmlns:q1="http://soappkcs7.webservices.layer6.tss.aus.teleca.com"> > <contentDataBase64 > xsi:type="xsd:string">AQMEBTYELS0tLTYtNjYt</contentDataBase64> > <keyPairAlias xsi:type="xsd:string">test_0</keyPairAlias> > <timestamp xsi:nil="true"></timestamp> > <serviceAlias xsi:type="xsd:string">std_service</serviceAlias> > <customPolicy href="#id1" /> > <transactionId xsi:type="xsd:string">test case</transactionId> > </q1:createPKCS7SignedData> > <soapenc:Array id="id1" xmlns:q2="urn:StringPair" > soapenc:arrayType="q2:StringPair[3]"> > <Item href="#id2" /> > <Item href="#id3" /> > <Item href="#id4" /> > </soapenc:Array> > <q3:StringPair id="id2" xsi:type="q3:StringPair" > xmlns:q3="urn:StringPair"> > <leftString > xsi:type="xsd:string">service.signature.creation.hashAlg</leftString> > <rightString xsi:type="xsd:string">sha1</rightString> > </q3:StringPair> > <q4:StringPair id="id3" xsi:type="q4:StringPair" > xmlns:q4="urn:StringPair"> > <leftString > xsi:type="xsd:string">service.certificatechain.requireTimeValidation</left > String> > <rightString xsi:type="xsd:string">true</rightString> > </q4:StringPair> > <q5:StringPair id="id4" xsi:type="q5:StringPair" > xmlns:q5="urn:StringPair"> > <leftString > xsi:type="xsd:string">service.signature.creation.includeTimeStamp</leftStr > ing> > <rightString xsi:type="xsd:string">none</rightString> > </q5:StringPair> > </soap:Body> > </soap:Envelope> > > -------------------------------------------------------------------------- > -------------------------------------------------------------------------- > ------------------------------------------------------------------------- > Here comes the response- Axis expects a String element, but but receives a > Object of another types since the parameter "timestamp" was not included > in the request: > > HTTP/1.1 100 Continue HTTP/1.1 500 Internal Server Error Content-Type: > text/xml; charset=utf-8 Date: Tue, 16 Sep 2003 07:01:08 GMT > Transfer-Encoding: chunked Server: Apache Tomcat/4.0.3 (HTTP/1.1 > Connector) 1ef <?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> > <soapenv:Fault> > <faultcode>soapenv:Server.userException</faultcode> > <faultstring>org.xml.sax.SAXException: Bad types (class > [Ljava.lang.Object; -> class java.lang.String)</faultstring> > <detail/> > </soapenv:Fault> > </soapenv:Body> > </soapenv:Envelope> > > > __________________________________________________________________________ > ____________________________________________________ > > A SOAP request where the called method is createPKCS7SignedData. Here I > have manipulated the SOAP reguest by incling the following line: > <timestamp xsi:nil="true"></timestamp> > > <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" > xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" > xmlns:tns="http://127.0.0.1:8080/services/SoapPKCS7" > xmlns:types="http://127.0.0.1:8080/services/SoapPKCS7/encodedTypes" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xmlns:xsd="http://www.w3.org/2001/XMLSchema"> > <soap:Body > soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> > <q1:createPKCS7SignedData > xmlns:q1="http://soappkcs7.webservices.layer6.tss.aus.teleca.com"> > > <contentDataBase64 > xsi:type="xsd:string">AQMEBTYELS0tLTYtNjYt</contentDataBase64> > <keyPairAlias xsi:type="xsd:string">test_0</keyPairAlias> > <timestamp xsi:nil="true"></timestamp> > <serviceAlias xsi:type="xsd:string">std_service</serviceAlias> > > <customPolicy href="#id1" /> > <transactionId xsi:type="xsd:string">test case</transactionId> > > </q1:createPKCS7SignedData> > <soapenc:Array id="id1" xmlns:q2="urn:StringPair" > soapenc:arrayType="q2:StringPair[3]"> > <Item href="#id2" /> > <Item href="#id3" /> > <Item href="#id4" /> > </soapenc:Array> > <q3:StringPair id="id2" xsi:type="q3:StringPair" > xmlns:q3="urn:StringPair"> > <leftString > xsi:type="xsd:string">service.signature.creation.hashAlg</leftString> > > <rightString xsi:type="xsd:string">sha1</rightString> > </q3:StringPair> > <q4:StringPair id="id3" xsi:type="q4:StringPair" > xmlns:q4="urn:StringPair"> > <leftString > xsi:type="xsd:string">service.certificatechain.requireTimeValidation</left > String> > <rightString xsi:type="xsd:string">true</rightString> > </q4:StringPair> > <q5:StringPair id="id4" xsi:type="q5:StringPair" > xmlns:q5="urn:StringPair"> > <leftString > xsi:type="xsd:string">service.signature.creation.includeTimeStamp</leftStr > ing> > <rightString xsi:type="xsd:string">none</rightString> > </q5:StringPair> > </soap:Body> > </soap:Envelope> > > > -------------------------------------------------------------------------- > -------------------------------------------------------------------------- > ------------------------------------------------------------------------- > This is the response - everything is fine. > > > HTTP/1.1 100 Continue HTTP/1.1 200 OK Content-Type: text/xml; > charset=utf-8 Date: Tue, 16 Sep 2003 07:02:49 GMT Transfer-Encoding: > chunked Server: Apache Tomcat/4.0.3 (HTTP/1.1 Connector) a8b <?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> > <ns1:createPKCS7SignedDataResponse > soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" > xmlns:ns1="http://soappkcs7.webservices.layer6.tss.aus.teleca.com"> > <ns1:createPKCS7SignedDataReturn href="#id0"/> > </ns1:createPKCS7SignedDataResponse> > <multiRef id="id0" soapenc:root="0" > soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" > xsi:type="ns2:SoapPKCS7ResultSet" > xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" > xmlns:ns2="urn:SoapPKCS7ResultSet"> > <contentData xsi:type="xsd:base64Binary" xsi:nil="true"/> > <extractedProperties xsi:type="ns3:PropertyObject" > xsi:nil="true" xmlns:ns3="urn:PropertyObject"/> > <resultCode xsi:type="xsd:int">0</resultCode> > <pkcs7SignedData > xsi:type="xsd:base64Binary">MIIEVwYJKoZIhvcNAQcCoIIESDCCBEQCAQExCzAJBgUrDg > MCGgUAMB4GCSqGSIb3DQEHAaARBA8BAwQFNgQtLS0tNi02Ni2gggKpMIICpTCCAg6gAwIBAgIB > ATANBgkqhkiG9w0BAQUFADB3MQswCQYDVQQGEwJTRTEVMBMGA1UEChMMQVUgU3lzdGVtIEFCMQ > wwCgYDVQQLEwNFSUExGTAXBgNVBAMTEFRTUyBUZXN0IFJvb3QgQ0ExHDAaBgkqhkiG9w0BCQEW > DWZybGFAYXVzeXMuc2UxCjAIBgNVBAUTATAwHhcNMDMwMjEzMTU0OTE0WhcNMDQwMjEzMTU0OT > E0WjBYMQswCQYDVQQGEwJTRTEVMBMGA1UEChMMQVUgU3lzdGVtIEFCMQwwCgYDVQQLEwNFSUEx > GDAWBgNVBAMTD1RTUyBUZXN0IENlcnQgMDEKMAgGA1UEBRMBMTCBnzANBgkqhkiG9w0BAQEFAA > OBjQAwgYkCgYEAr3l/dxtRVTYi0+UwdqlwjCCaRPtg901qXMcLxf4zqTQjPzB9y/PoSMVPxF0K > zjmRVVEy9TUhUn3c+rAsRit1BUq+mhxMFzAfD2SRtgshcEeimltS1yKDq8nQ5wbkoixStJ8d6e > vJ966pMIizwfobGIZ7nJZwywIKHatDYx6Ysd8CAwEAAaNgMF4wDAYDVR0TAQH/BAIwADAfBgNV > HSMEGDAWgBSGYVPUU4lIMeFpapIJ5GP1Dmn4MzAdBgNVHQ4EFgQUuYX9HyojziAP88BtZC5v5v > RWmmswDgYDVR0PAQH/BAQDAgWgMA0GCSqGSIb3DQEBBQUAA4GBAEpgHcDY2R1rz7C0csSNVZ4N > KrcWMBZjaHVgAjkbkTDx7SslvVyLQuduvUerRy3yECxZrkixpxOEqsj2HPwuIl0rgUh47vadCg > GMhsC5MaS5kJtv5/W9gRiQqV8A7LUNsMRQ/osAtbGX11tEQ8sAYPPgMg0c/cTS+Ku128dqp2Um > MYIBYzCCAV8CAQEwfDB3MQswCQYDVQQGEwJTRTEVMBMGA1UEChMMQVUgU3lzdGVtIEFCMQwwCg > YDVQQLEwNFSUExGTAXBgNVBAMTEFRTUyBUZXN0IFJvb3QgQ0ExHDAaBgkqhkiG9w0BCQEWDWZy > bGFAYXVzeXMuc2UxCjAIBgNVBAUTATACAQEwCQYFKw4DAhoFAKA/MBgGCSqGSIb3DQEJAzELBg > kqhkiG9w0BBwEwIwYJKoZIhvcNAQkEMRYEFECpECua+3eEVZ+vp8bCgz5xeZXVMA0GCSqGSIb3 > DQEBAQUABIGAMtJItezjov9xH9wBEhIeOiOnl6YG8ITa5acuJQJomnyZEMIu7PyfTPBlAlHK3I > WEg4lgQJQwyP0mC8kaxSWP+V6vxxgCMIfhfFv9Io7GHvV2hJXXOhnReg29XwaX0xrmLkKegHov > cS0oPRaMqpHR+6AmTeYoaY1YBPVpHgzrepk=</pkcs7SignedData> > <resultMessage xsi:type="xsd:string">No errors > occurred.</resultMessage> > <transactionId xsi:type="xsd:string">client:127.0.0.1/test > case</transactionId> > </multiRef> > </soapenv:Body> > </soapenv:Envelope> > > > >
SoapPKCS7.wsdl
Description: Binary data
