Hello all,
I hope you can help me with this..
I am deploying a web service in Tomcat 6.0.13 and use Axis 1.4 to deal with
the SOAP messages.
I managed to deploy my service successfully and write a client that will
invoke its methods.
(I was given a WSDL and created the server skeletons with: WSDL2Java
--server-side --skeletonDeploy true wsdlfile
and the client stubs with: WSDL2Java wsdlfile )
However, upon invoking a method of the service, I get an
IllegalArgumentException that I can not understand why. In more detail:
The method I invoke is:
_stub.read(new UnsignedLong(startOffset), new UnsignedInt(bytesPerBlock),
new UnsignedInt(numBlocks), Long.valueOf(stride).longValue(),
transferHolder);
,where _stub is the client's "local" stub, and the startOffset,
numBlocks,stride variables are simple Strings.
The client connects to the service, and then attempts to invoke the method.
The exception I get is:
Tried to invoke method public void
localhost.random_access.bindings.RandomByteIOSOAPBindingSkeleton.read(
org.apache.axis.types.UnsignedLong,org.apache.axis.types.UnsignedInt,
org.apache.axis.types.UnsignedInt,long,
localhost.byte_io.holders.TransferInformationTypeHolder ) throws
java.rmi.RemoteException with arguments org.apache.axis.types.UnsignedLong
,null,null,null,localhost.byte_io.holders.TransferInformationTypeHolder.
The arguments do not match the signature.; nested exception is:
java.lang.IllegalArgumentException
at org.apache.axis.message.SOAPFaultBuilder.createFault(
SOAPFaultBuilder.java:222)
at org.apache.axis.message.SOAPFaultBuilder.endElement(
SOAPFaultBuilder.java:129)
at org.apache.axis.encoding.DeserializationContext.endElement(
DeserializationContext.java:1087)
at
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(
AbstractSAXParser.java:633)
at
com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanEndElement
(XMLNSDocumentScannerImpl.java:719)
at
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch
(XMLDocumentFragmentScannerImpl.java:1685)
at
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument
(XMLDocumentFragmentScannerImpl.java:368)
at
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(
XML11Configuration.java:834)
at
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(
XML11Configuration.java:764)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(
XMLParser.java:148)
at
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(
AbstractSAXParser.java:1242)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:375)
at org.apache.axis.encoding.DeserializationContext.parse(
DeserializationContext.java:227)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(
MustUnderstandChecker.java:62)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at localhost.random_access.bindings.RandomByteIOSOAPBindingStub.read
(RandomByteIOSOAPBindingStub.java:1006)
at Client.read(Client.java:63)
at Client.main(Client.java:172)
For some reason the arguments:
new UnsignedInt(numBlocks), new UnsignedInt(numBlocks),
Long.valueOf(stride).longValue()
are replaced with nulls by AXIS.
The arguments are not null even until
localhost.random_access.bindings.RandomByteIOSOAPBindingStub.read(
RandomByteIOSOAPBindingStub.java:1006)
I guess that this is some marshaling/unmarshaling issue
This is the wsdl of the read operation:
<xsd:element name="read">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1"
name="start-offset" type="xsd:unsignedLong"/>
<xsd:element maxOccurs="1" minOccurs="1"
name="bytes-per-block" type="xsd:unsignedInt"/>
<xsd:element maxOccurs="1" minOccurs="1"
name="num-blocks" type="xsd:unsignedInt"/>
<xsd:element maxOccurs="1" minOccurs="1"
name="stride" type="xsd:long"/>
<xsd:element maxOccurs="1" minOccurs="1"
name="transfer-information" type="byteio:transfer-information-type"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
Can someone figure out why this is happening and how to avoid it maybe?
Thank you in advance,
Odysseas