You are viewing a plain text version of this content. The canonical link for it is here.
Posted to soap-user@xml.apache.org by nb...@touchcorp.com on 2002/09/18 02:24:02 UTC
FW: RPC problems?
Hi All,
I'm posting this to this group because you guys seem to be across Axis
and I didn't get a response from anyone in the axis-user group. If this
is bad form, then I apologise in advance, but I'm really stuck here!
Any help at all would be greatly appreciated...
Regards,
Neil Brennan
-----Original Message-----
From: Neil Brennan
Sent: Tuesday, 17 September 2002 17:23
To: 'axis-user@xml.apache.org'
Subject: RPC problems?
Hi,
I'm using what I believe to be the latest version of AXIS on Linux (I
downloaded "xml-axis-rc1-bin.zip" yesterday) and trying to talk to a
Borland SOAP server with 5 different services. I'm having very weird
problems with it.
I originally started using Apache SOAP, hand-building all the complex
classes I wanted to pass around. Then I discovered WSDL2Java and used
it to generate all the classes I need. I implemented one interface
fully to a single service without a hitch. This wasn't just a 'vanilla'
service, it had plenty of beans being passed around and seemed to work
perfectly.
Then I tried to move onto the next service.
Here is the WSDL of the second service:
http://tims.moveyourselftrailer.com.au:8000/scripts/SackTruck.dll/wsdl/I
SackTruck
I used this snippet of code to try and access the simplest of the ports,
just as I did previously for the other service:
ISackTruckservice locator = new ISackTruckserviceLocator();
ISackTruck client = locator.getISackTruckPort();
Object fees = client.getSackTruckFees();
And got:
org.xml.sax.SAXException: operation description is missing parameter
description!
at
org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:220)
at
org.apache.axis.encoding.DeserializationContextImpl.startElement(Deseria
lizationContextImpl.java:883)
at
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:
158)
at
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.j
ava:681)
at
org.apache.axis.message.RPCElement.deserialize(RPCElement.java:244)
at
org.apache.axis.message.RPCElement.getParams(RPCElement.java:268)
at org.apache.axis.client.Call.invoke(Call.java:1862)
at org.apache.axis.client.Call.invoke(Call.java:1768)
at org.apache.axis.client.Call.invoke(Call.java:1306)
at
com.touchcorp.soap.isacktruck.ISackTruckbindingStub.getSackTruckFees(ISa
ckTruckbindingStub.java:228)
at
com.touchcorp.remote.party.ISackTruckService.getSackTruckFees(ISackTruck
Service.java:96)
at
com.touchcorp.remote.party.ISackTruckService.main(ISackTruckService.java
:133)
[ERROR] Call - -Exception: <org.xml.sax.SAXException: operation
description is missing parameter description!>
Exception in thread "main" AxisFault
faultCode: {http://xml.apache.org/axis/}Server.userException
faultString: org.xml.sax.SAXException: operation description is missing
parameter description!
faultActor: null
faultDetail:
stackTrace: org.xml.sax.SAXException: operation description is
missing parameter description!
at
org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:220)
at
org.apache.axis.encoding.DeserializationContextImpl.startElement(Deseria
lizationContextImpl.java:883)
at
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:
158)
at
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.j
ava:681)
at
org.apache.axis.message.RPCElement.deserialize(RPCElement.java:244)
at
org.apache.axis.message.RPCElement.getParams(RPCElement.java:268)
at org.apache.axis.client.Call.invoke(Call.java:1862)
at org.apache.axis.client.Call.invoke(Call.java:1768)
at org.apache.axis.client.Call.invoke(Call.java:1306)
at
com.touchcorp.soap.isacktruck.ISackTruckbindingStub.getSackTruckFees(ISa
ckTruckbindingStub.java:228)
at
com.touchcorp.remote.party.ISackTruckService.getSackTruckFees(ISackTruck
Service.java:96)
at
com.touchcorp.remote.party.ISackTruckService.main(ISackTruckService.java
:133)
org.xml.sax.SAXException: operation description is missing parameter
description!
org.xml.sax.SAXException: operation description is missing parameter
description!
at
org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:220)
at
org.apache.axis.encoding.DeserializationContextImpl.startElement(Deseria
lizationContextImpl.java:883)
at
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:
158)
at
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.j
ava:681)
at
org.apache.axis.message.RPCElement.deserialize(RPCElement.java:244)
at
org.apache.axis.message.RPCElement.getParams(RPCElement.java:268)
at org.apache.axis.client.Call.invoke(Call.java:1862)
at org.apache.axis.client.Call.invoke(Call.java:1768)
at org.apache.axis.client.Call.invoke(Call.java:1306)
at
com.touchcorp.soap.isacktruck.ISackTruckbindingStub.getSackTruckFees(ISa
ckTruckbindingStub.java:228)
at
com.touchcorp.remote.party.ISackTruckService.getSackTruckFees(ISackTruck
Service.java:96)
at
com.touchcorp.remote.party.ISackTruckService.main(ISackTruckService.java
:133)
But, if I go back and use Apache SOAP directly, everything seems to work
just fine. I am *not* using an operation style of "rpc" when I call via
SOAP directly. My code looks more like this:
URL url = new URL(locator.getISackTruckPortAddress());
String uri = "urn:uSackTruckFee";
String method = "getSackTruckFees";
Class type =
com.touchcorp.soap.isacktruck.TSackTruckFeeInfo.class;
Vector args = new Vector();
// get short version of type class name
String typeName = type.getName();
int index = typeName.lastIndexOf(".");
if (index > 0)
typeName = typeName.substring(index+1);
// set up bean mappings
SOAPMappingRegistry registry = new SOAPMappingRegistry();
BeanSerializer serializer = new BeanSerializer();
registry.mapTypes(Constants.NS_URI_SOAP_ENC, new QName(uri,
typeName), type, serializer, serializer);
// build the call
Call call = new Call();
call.setSOAPMappingRegistry(registry);
call.setTargetObjectURI(uri);
call.setMethodName(method);
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
call.setParams(args);
// make the call
Response response = call.invoke(url, "");
Help!
I have attached some of the relevant WSDL2Java-generated code below.
Any assistance at all would be appreciated greatly. This is the most
common error I am seeing with AXIS, and I get it with almost every
method I try, but I am also getting many other equally strange errors to
do with serializers, out-of-range errors and other things. One at a
time.
Regards,
Neil Brennan
------------------------------------------------------------------------
------------------------------------------------------------------------
------------
============================
from ISackTruckbindingStub.java:
============================
public com.touchcorp.soap.isacktruck.TSackTruckFeeInfo
getSackTruckFees() throws java.rmi.RemoteException {
if (super.cachedEndpoint == null) {
throw new org.apache.axis.NoEndPointException();
}
org.apache.axis.client.Call _call = createCall();
_call.setReturnType(new
javax.xml.namespace.QName("urn:uSackTruckFee", "TSackTruckFeeInfo"),
com.touchcorp.soap.isacktruck.TSackTruckFeeInfo.class);
_call.setUseSOAPAction(true);
_call.setSOAPActionURI("urn:uSackTruckIntf-ISackTruck#getSackTruckFees")
;
_call.setOperationStyle("rpc");
_call.setOperationName(new
javax.xml.namespace.QName("urn:uSackTruckIntf-ISackTruck",
"getSackTruckFees"));
java.lang.Object _resp = _call.invoke(new java.lang.Object[]
{});
if (_resp instanceof java.rmi.RemoteException) {
throw (java.rmi.RemoteException)_resp;
}
else {
try {
return (com.touchcorp.soap.isacktruck.TSackTruckFeeInfo)
_resp;
} catch (java.lang.Exception _exception) {
return (com.touchcorp.soap.isacktruck.TSackTruckFeeInfo)
org.apache.axis.utils.JavaUtils.convert(_resp,
com.touchcorp.soap.isacktruck.TSackTruckFeeInfo.class);
}
}
}
============================
from TSackTruckFeeInfo.java:
============================
/**
* TSackTruckFeeInfo.java
*
* This file was auto-generated from WSDL
* by the Apache Axis WSDL2Java emitter.
*/
package com.touchcorp.soap.isacktruck;
public class TSackTruckFeeInfo implements java.io.Serializable {
private double deposit;
private double hireFee;
public TSackTruckFeeInfo() {
}
public double getDeposit() {
return deposit;
}
public void setDeposit(double deposit) {
this.deposit = deposit;
}
public double getHireFee() {
return hireFee;
}
public void setHireFee(double hireFee) {
this.hireFee = hireFee;
}
private java.lang.Object __equalsCalc = null;
public synchronized boolean equals(java.lang.Object obj) {
if (!(obj instanceof TSackTruckFeeInfo)) return false;
TSackTruckFeeInfo other = (TSackTruckFeeInfo) obj;
if (obj == null) return false;
if (this == obj) return true;
if (__equalsCalc != null) {
return (__equalsCalc == obj);
}
__equalsCalc = obj;
boolean _equals;
_equals = true &&
deposit == other.getDeposit() &&
hireFee == other.getHireFee();
__equalsCalc = null;
return _equals;
}
private boolean __hashCodeCalc = false;
public synchronized int hashCode() {
if (__hashCodeCalc) {
return 0;
}
__hashCodeCalc = true;
int _hashCode = 1;
_hashCode += new Double(getDeposit()).hashCode();
_hashCode += new Double(getHireFee()).hashCode();
__hashCodeCalc = false;
return _hashCode;
}
// Type metadata
private static org.apache.axis.description.TypeDesc typeDesc =
new
org.apache.axis.description.TypeDesc(TSackTruckFeeInfo.class);
static {
org.apache.axis.description.FieldDesc field = new
org.apache.axis.description.ElementDesc();
field.setFieldName("deposit");
field.setXmlName(new javax.xml.namespace.QName("", "Deposit"));
typeDesc.addFieldDesc(field);
field = new org.apache.axis.description.ElementDesc();
field.setFieldName("hireFee");
field.setXmlName(new javax.xml.namespace.QName("", "HireFee"));
typeDesc.addFieldDesc(field);
};
/**
* Return type metadata object
*/
public static org.apache.axis.description.TypeDesc getTypeDesc() {
return typeDesc;
}
/**
* Get Custom Serializer
*/
public static org.apache.axis.encoding.Serializer getSerializer(
java.lang.String mechType,
java.lang.Class _javaType,
javax.xml.namespace.QName _xmlType) {
return
new org.apache.axis.encoding.ser.BeanSerializer(
_javaType, _xmlType, typeDesc);
}
/**
* Get Custom Deserializer
*/
public static org.apache.axis.encoding.Deserializer getDeserializer(
java.lang.String mechType,
java.lang.Class _javaType,
javax.xml.namespace.QName _xmlType) {
return
new org.apache.axis.encoding.ser.BeanDeserializer(
_javaType, _xmlType, typeDesc);
}
}
Re: RPC problems?
Posted by Scott Nichol <sn...@scottnichol.com>.
Typically, this list is Apache SOAP users, not Axis users, so you are less
likely to get help here.
The one thing I see from the WSDL is that the method you call is the only
one that uses a complex type. Do the other methods on the interface work?
Scott Nichol
----- Original Message -----
From: <nb...@touchcorp.com>
To: <so...@xml.apache.org>
Sent: Tuesday, September 17, 2002 8:24 PM
Subject: FW: RPC problems?
Hi All,
I'm posting this to this group because you guys seem to be across Axis
and I didn't get a response from anyone in the axis-user group. If this
is bad form, then I apologise in advance, but I'm really stuck here!
Any help at all would be greatly appreciated...
Regards,
Neil Brennan
-----Original Message-----
From: Neil Brennan
Sent: Tuesday, 17 September 2002 17:23
To: 'axis-user@xml.apache.org'
Subject: RPC problems?
Hi,
I'm using what I believe to be the latest version of AXIS on Linux (I
downloaded "xml-axis-rc1-bin.zip" yesterday) and trying to talk to a
Borland SOAP server with 5 different services. I'm having very weird
problems with it.
I originally started using Apache SOAP, hand-building all the complex
classes I wanted to pass around. Then I discovered WSDL2Java and used
it to generate all the classes I need. I implemented one interface
fully to a single service without a hitch. This wasn't just a 'vanilla'
service, it had plenty of beans being passed around and seemed to work
perfectly.
Then I tried to move onto the next service.
Here is the WSDL of the second service:
http://tims.moveyourselftrailer.com.au:8000/scripts/SackTruck.dll/wsdl/I
SackTruck
I used this snippet of code to try and access the simplest of the ports,
just as I did previously for the other service:
ISackTruckservice locator = new ISackTruckserviceLocator();
ISackTruck client = locator.getISackTruckPort();
Object fees = client.getSackTruckFees();
And got:
org.xml.sax.SAXException: operation description is missing parameter
description!
at
org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:220)
at
org.apache.axis.encoding.DeserializationContextImpl.startElement(Deseria
lizationContextImpl.java:883)
at
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:
158)
at
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.j
ava:681)
at
org.apache.axis.message.RPCElement.deserialize(RPCElement.java:244)
at
org.apache.axis.message.RPCElement.getParams(RPCElement.java:268)
at org.apache.axis.client.Call.invoke(Call.java:1862)
at org.apache.axis.client.Call.invoke(Call.java:1768)
at org.apache.axis.client.Call.invoke(Call.java:1306)
at
com.touchcorp.soap.isacktruck.ISackTruckbindingStub.getSackTruckFees(ISa
ckTruckbindingStub.java:228)
at
com.touchcorp.remote.party.ISackTruckService.getSackTruckFees(ISackTruck
Service.java:96)
at
com.touchcorp.remote.party.ISackTruckService.main(ISackTruckService.java
:133)
[ERROR] Call - -Exception: <org.xml.sax.SAXException: operation
description is missing parameter description!>
Exception in thread "main" AxisFault
faultCode: {http://xml.apache.org/axis/}Server.userException
faultString: org.xml.sax.SAXException: operation description is missing
parameter description!
faultActor: null
faultDetail:
stackTrace: org.xml.sax.SAXException: operation description is
missing parameter description!
at
org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:220)
at
org.apache.axis.encoding.DeserializationContextImpl.startElement(Deseria
lizationContextImpl.java:883)
at
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:
158)
at
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.j
ava:681)
at
org.apache.axis.message.RPCElement.deserialize(RPCElement.java:244)
at
org.apache.axis.message.RPCElement.getParams(RPCElement.java:268)
at org.apache.axis.client.Call.invoke(Call.java:1862)
at org.apache.axis.client.Call.invoke(Call.java:1768)
at org.apache.axis.client.Call.invoke(Call.java:1306)
at
com.touchcorp.soap.isacktruck.ISackTruckbindingStub.getSackTruckFees(ISa
ckTruckbindingStub.java:228)
at
com.touchcorp.remote.party.ISackTruckService.getSackTruckFees(ISackTruck
Service.java:96)
at
com.touchcorp.remote.party.ISackTruckService.main(ISackTruckService.java
:133)
org.xml.sax.SAXException: operation description is missing parameter
description!
org.xml.sax.SAXException: operation description is missing parameter
description!
at
org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:220)
at
org.apache.axis.encoding.DeserializationContextImpl.startElement(Deseria
lizationContextImpl.java:883)
at
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:
158)
at
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.j
ava:681)
at
org.apache.axis.message.RPCElement.deserialize(RPCElement.java:244)
at
org.apache.axis.message.RPCElement.getParams(RPCElement.java:268)
at org.apache.axis.client.Call.invoke(Call.java:1862)
at org.apache.axis.client.Call.invoke(Call.java:1768)
at org.apache.axis.client.Call.invoke(Call.java:1306)
at
com.touchcorp.soap.isacktruck.ISackTruckbindingStub.getSackTruckFees(ISa
ckTruckbindingStub.java:228)
at
com.touchcorp.remote.party.ISackTruckService.getSackTruckFees(ISackTruck
Service.java:96)
at
com.touchcorp.remote.party.ISackTruckService.main(ISackTruckService.java
:133)
But, if I go back and use Apache SOAP directly, everything seems to work
just fine. I am *not* using an operation style of "rpc" when I call via
SOAP directly. My code looks more like this:
URL url = new URL(locator.getISackTruckPortAddress());
String uri = "urn:uSackTruckFee";
String method = "getSackTruckFees";
Class type =
com.touchcorp.soap.isacktruck.TSackTruckFeeInfo.class;
Vector args = new Vector();
// get short version of type class name
String typeName = type.getName();
int index = typeName.lastIndexOf(".");
if (index > 0)
typeName = typeName.substring(index+1);
// set up bean mappings
SOAPMappingRegistry registry = new SOAPMappingRegistry();
BeanSerializer serializer = new BeanSerializer();
registry.mapTypes(Constants.NS_URI_SOAP_ENC, new QName(uri,
typeName), type, serializer, serializer);
// build the call
Call call = new Call();
call.setSOAPMappingRegistry(registry);
call.setTargetObjectURI(uri);
call.setMethodName(method);
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
call.setParams(args);
// make the call
Response response = call.invoke(url, "");
Help!
I have attached some of the relevant WSDL2Java-generated code below.
Any assistance at all would be appreciated greatly. This is the most
common error I am seeing with AXIS, and I get it with almost every
method I try, but I am also getting many other equally strange errors to
do with serializers, out-of-range errors and other things. One at a
time.
Regards,
Neil Brennan
------------------------------------------------------------------------
------------------------------------------------------------------------
------------
============================
from ISackTruckbindingStub.java:
============================
public com.touchcorp.soap.isacktruck.TSackTruckFeeInfo
getSackTruckFees() throws java.rmi.RemoteException {
if (super.cachedEndpoint == null) {
throw new org.apache.axis.NoEndPointException();
}
org.apache.axis.client.Call _call = createCall();
_call.setReturnType(new
javax.xml.namespace.QName("urn:uSackTruckFee", "TSackTruckFeeInfo"),
com.touchcorp.soap.isacktruck.TSackTruckFeeInfo.class);
_call.setUseSOAPAction(true);
_call.setSOAPActionURI("urn:uSackTruckIntf-ISackTruck#getSackTruckFees")
;
_call.setOperationStyle("rpc");
_call.setOperationName(new
javax.xml.namespace.QName("urn:uSackTruckIntf-ISackTruck",
"getSackTruckFees"));
java.lang.Object _resp = _call.invoke(new java.lang.Object[]
{});
if (_resp instanceof java.rmi.RemoteException) {
throw (java.rmi.RemoteException)_resp;
}
else {
try {
return (com.touchcorp.soap.isacktruck.TSackTruckFeeInfo)
_resp;
} catch (java.lang.Exception _exception) {
return (com.touchcorp.soap.isacktruck.TSackTruckFeeInfo)
org.apache.axis.utils.JavaUtils.convert(_resp,
com.touchcorp.soap.isacktruck.TSackTruckFeeInfo.class);
}
}
}
============================
from TSackTruckFeeInfo.java:
============================
/**
* TSackTruckFeeInfo.java
*
* This file was auto-generated from WSDL
* by the Apache Axis WSDL2Java emitter.
*/
package com.touchcorp.soap.isacktruck;
public class TSackTruckFeeInfo implements java.io.Serializable {
private double deposit;
private double hireFee;
public TSackTruckFeeInfo() {
}
public double getDeposit() {
return deposit;
}
public void setDeposit(double deposit) {
this.deposit = deposit;
}
public double getHireFee() {
return hireFee;
}
public void setHireFee(double hireFee) {
this.hireFee = hireFee;
}
private java.lang.Object __equalsCalc = null;
public synchronized boolean equals(java.lang.Object obj) {
if (!(obj instanceof TSackTruckFeeInfo)) return false;
TSackTruckFeeInfo other = (TSackTruckFeeInfo) obj;
if (obj == null) return false;
if (this == obj) return true;
if (__equalsCalc != null) {
return (__equalsCalc == obj);
}
__equalsCalc = obj;
boolean _equals;
_equals = true &&
deposit == other.getDeposit() &&
hireFee == other.getHireFee();
__equalsCalc = null;
return _equals;
}
private boolean __hashCodeCalc = false;
public synchronized int hashCode() {
if (__hashCodeCalc) {
return 0;
}
__hashCodeCalc = true;
int _hashCode = 1;
_hashCode += new Double(getDeposit()).hashCode();
_hashCode += new Double(getHireFee()).hashCode();
__hashCodeCalc = false;
return _hashCode;
}
// Type metadata
private static org.apache.axis.description.TypeDesc typeDesc =
new
org.apache.axis.description.TypeDesc(TSackTruckFeeInfo.class);
static {
org.apache.axis.description.FieldDesc field = new
org.apache.axis.description.ElementDesc();
field.setFieldName("deposit");
field.setXmlName(new javax.xml.namespace.QName("", "Deposit"));
typeDesc.addFieldDesc(field);
field = new org.apache.axis.description.ElementDesc();
field.setFieldName("hireFee");
field.setXmlName(new javax.xml.namespace.QName("", "HireFee"));
typeDesc.addFieldDesc(field);
};
/**
* Return type metadata object
*/
public static org.apache.axis.description.TypeDesc getTypeDesc() {
return typeDesc;
}
/**
* Get Custom Serializer
*/
public static org.apache.axis.encoding.Serializer getSerializer(
java.lang.String mechType,
java.lang.Class _javaType,
javax.xml.namespace.QName _xmlType) {
return
new org.apache.axis.encoding.ser.BeanSerializer(
_javaType, _xmlType, typeDesc);
}
/**
* Get Custom Deserializer
*/
public static org.apache.axis.encoding.Deserializer getDeserializer(
java.lang.String mechType,
java.lang.Class _javaType,
javax.xml.namespace.QName _xmlType) {
return
new org.apache.axis.encoding.ser.BeanDeserializer(
_javaType, _xmlType, typeDesc);
}
}
--
To unsubscribe, e-mail: <ma...@xml.apache.org>
For additional commands, e-mail: <ma...@xml.apache.org>
Re: RPC problems?
Posted by Scott Nichol <sn...@scottnichol.com>.
Typically, this list is Apache SOAP users, not Axis users, so you are less
likely to get help here.
The one thing I see from the WSDL is that the method you call is the only
one that uses a complex type. Do the other methods on the interface work?
Scott Nichol
----- Original Message -----
From: <nb...@touchcorp.com>
To: <so...@xml.apache.org>
Sent: Tuesday, September 17, 2002 8:24 PM
Subject: FW: RPC problems?
Hi All,
I'm posting this to this group because you guys seem to be across Axis
and I didn't get a response from anyone in the axis-user group. If this
is bad form, then I apologise in advance, but I'm really stuck here!
Any help at all would be greatly appreciated...
Regards,
Neil Brennan
-----Original Message-----
From: Neil Brennan
Sent: Tuesday, 17 September 2002 17:23
To: 'axis-user@xml.apache.org'
Subject: RPC problems?
Hi,
I'm using what I believe to be the latest version of AXIS on Linux (I
downloaded "xml-axis-rc1-bin.zip" yesterday) and trying to talk to a
Borland SOAP server with 5 different services. I'm having very weird
problems with it.
I originally started using Apache SOAP, hand-building all the complex
classes I wanted to pass around. Then I discovered WSDL2Java and used
it to generate all the classes I need. I implemented one interface
fully to a single service without a hitch. This wasn't just a 'vanilla'
service, it had plenty of beans being passed around and seemed to work
perfectly.
Then I tried to move onto the next service.
Here is the WSDL of the second service:
http://tims.moveyourselftrailer.com.au:8000/scripts/SackTruck.dll/wsdl/I
SackTruck
I used this snippet of code to try and access the simplest of the ports,
just as I did previously for the other service:
ISackTruckservice locator = new ISackTruckserviceLocator();
ISackTruck client = locator.getISackTruckPort();
Object fees = client.getSackTruckFees();
And got:
org.xml.sax.SAXException: operation description is missing parameter
description!
at
org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:220)
at
org.apache.axis.encoding.DeserializationContextImpl.startElement(Deseria
lizationContextImpl.java:883)
at
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:
158)
at
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.j
ava:681)
at
org.apache.axis.message.RPCElement.deserialize(RPCElement.java:244)
at
org.apache.axis.message.RPCElement.getParams(RPCElement.java:268)
at org.apache.axis.client.Call.invoke(Call.java:1862)
at org.apache.axis.client.Call.invoke(Call.java:1768)
at org.apache.axis.client.Call.invoke(Call.java:1306)
at
com.touchcorp.soap.isacktruck.ISackTruckbindingStub.getSackTruckFees(ISa
ckTruckbindingStub.java:228)
at
com.touchcorp.remote.party.ISackTruckService.getSackTruckFees(ISackTruck
Service.java:96)
at
com.touchcorp.remote.party.ISackTruckService.main(ISackTruckService.java
:133)
[ERROR] Call - -Exception: <org.xml.sax.SAXException: operation
description is missing parameter description!>
Exception in thread "main" AxisFault
faultCode: {http://xml.apache.org/axis/}Server.userException
faultString: org.xml.sax.SAXException: operation description is missing
parameter description!
faultActor: null
faultDetail:
stackTrace: org.xml.sax.SAXException: operation description is
missing parameter description!
at
org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:220)
at
org.apache.axis.encoding.DeserializationContextImpl.startElement(Deseria
lizationContextImpl.java:883)
at
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:
158)
at
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.j
ava:681)
at
org.apache.axis.message.RPCElement.deserialize(RPCElement.java:244)
at
org.apache.axis.message.RPCElement.getParams(RPCElement.java:268)
at org.apache.axis.client.Call.invoke(Call.java:1862)
at org.apache.axis.client.Call.invoke(Call.java:1768)
at org.apache.axis.client.Call.invoke(Call.java:1306)
at
com.touchcorp.soap.isacktruck.ISackTruckbindingStub.getSackTruckFees(ISa
ckTruckbindingStub.java:228)
at
com.touchcorp.remote.party.ISackTruckService.getSackTruckFees(ISackTruck
Service.java:96)
at
com.touchcorp.remote.party.ISackTruckService.main(ISackTruckService.java
:133)
org.xml.sax.SAXException: operation description is missing parameter
description!
org.xml.sax.SAXException: operation description is missing parameter
description!
at
org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:220)
at
org.apache.axis.encoding.DeserializationContextImpl.startElement(Deseria
lizationContextImpl.java:883)
at
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:
158)
at
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.j
ava:681)
at
org.apache.axis.message.RPCElement.deserialize(RPCElement.java:244)
at
org.apache.axis.message.RPCElement.getParams(RPCElement.java:268)
at org.apache.axis.client.Call.invoke(Call.java:1862)
at org.apache.axis.client.Call.invoke(Call.java:1768)
at org.apache.axis.client.Call.invoke(Call.java:1306)
at
com.touchcorp.soap.isacktruck.ISackTruckbindingStub.getSackTruckFees(ISa
ckTruckbindingStub.java:228)
at
com.touchcorp.remote.party.ISackTruckService.getSackTruckFees(ISackTruck
Service.java:96)
at
com.touchcorp.remote.party.ISackTruckService.main(ISackTruckService.java
:133)
But, if I go back and use Apache SOAP directly, everything seems to work
just fine. I am *not* using an operation style of "rpc" when I call via
SOAP directly. My code looks more like this:
URL url = new URL(locator.getISackTruckPortAddress());
String uri = "urn:uSackTruckFee";
String method = "getSackTruckFees";
Class type =
com.touchcorp.soap.isacktruck.TSackTruckFeeInfo.class;
Vector args = new Vector();
// get short version of type class name
String typeName = type.getName();
int index = typeName.lastIndexOf(".");
if (index > 0)
typeName = typeName.substring(index+1);
// set up bean mappings
SOAPMappingRegistry registry = new SOAPMappingRegistry();
BeanSerializer serializer = new BeanSerializer();
registry.mapTypes(Constants.NS_URI_SOAP_ENC, new QName(uri,
typeName), type, serializer, serializer);
// build the call
Call call = new Call();
call.setSOAPMappingRegistry(registry);
call.setTargetObjectURI(uri);
call.setMethodName(method);
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
call.setParams(args);
// make the call
Response response = call.invoke(url, "");
Help!
I have attached some of the relevant WSDL2Java-generated code below.
Any assistance at all would be appreciated greatly. This is the most
common error I am seeing with AXIS, and I get it with almost every
method I try, but I am also getting many other equally strange errors to
do with serializers, out-of-range errors and other things. One at a
time.
Regards,
Neil Brennan
------------------------------------------------------------------------
------------------------------------------------------------------------
------------
============================
from ISackTruckbindingStub.java:
============================
public com.touchcorp.soap.isacktruck.TSackTruckFeeInfo
getSackTruckFees() throws java.rmi.RemoteException {
if (super.cachedEndpoint == null) {
throw new org.apache.axis.NoEndPointException();
}
org.apache.axis.client.Call _call = createCall();
_call.setReturnType(new
javax.xml.namespace.QName("urn:uSackTruckFee", "TSackTruckFeeInfo"),
com.touchcorp.soap.isacktruck.TSackTruckFeeInfo.class);
_call.setUseSOAPAction(true);
_call.setSOAPActionURI("urn:uSackTruckIntf-ISackTruck#getSackTruckFees")
;
_call.setOperationStyle("rpc");
_call.setOperationName(new
javax.xml.namespace.QName("urn:uSackTruckIntf-ISackTruck",
"getSackTruckFees"));
java.lang.Object _resp = _call.invoke(new java.lang.Object[]
{});
if (_resp instanceof java.rmi.RemoteException) {
throw (java.rmi.RemoteException)_resp;
}
else {
try {
return (com.touchcorp.soap.isacktruck.TSackTruckFeeInfo)
_resp;
} catch (java.lang.Exception _exception) {
return (com.touchcorp.soap.isacktruck.TSackTruckFeeInfo)
org.apache.axis.utils.JavaUtils.convert(_resp,
com.touchcorp.soap.isacktruck.TSackTruckFeeInfo.class);
}
}
}
============================
from TSackTruckFeeInfo.java:
============================
/**
* TSackTruckFeeInfo.java
*
* This file was auto-generated from WSDL
* by the Apache Axis WSDL2Java emitter.
*/
package com.touchcorp.soap.isacktruck;
public class TSackTruckFeeInfo implements java.io.Serializable {
private double deposit;
private double hireFee;
public TSackTruckFeeInfo() {
}
public double getDeposit() {
return deposit;
}
public void setDeposit(double deposit) {
this.deposit = deposit;
}
public double getHireFee() {
return hireFee;
}
public void setHireFee(double hireFee) {
this.hireFee = hireFee;
}
private java.lang.Object __equalsCalc = null;
public synchronized boolean equals(java.lang.Object obj) {
if (!(obj instanceof TSackTruckFeeInfo)) return false;
TSackTruckFeeInfo other = (TSackTruckFeeInfo) obj;
if (obj == null) return false;
if (this == obj) return true;
if (__equalsCalc != null) {
return (__equalsCalc == obj);
}
__equalsCalc = obj;
boolean _equals;
_equals = true &&
deposit == other.getDeposit() &&
hireFee == other.getHireFee();
__equalsCalc = null;
return _equals;
}
private boolean __hashCodeCalc = false;
public synchronized int hashCode() {
if (__hashCodeCalc) {
return 0;
}
__hashCodeCalc = true;
int _hashCode = 1;
_hashCode += new Double(getDeposit()).hashCode();
_hashCode += new Double(getHireFee()).hashCode();
__hashCodeCalc = false;
return _hashCode;
}
// Type metadata
private static org.apache.axis.description.TypeDesc typeDesc =
new
org.apache.axis.description.TypeDesc(TSackTruckFeeInfo.class);
static {
org.apache.axis.description.FieldDesc field = new
org.apache.axis.description.ElementDesc();
field.setFieldName("deposit");
field.setXmlName(new javax.xml.namespace.QName("", "Deposit"));
typeDesc.addFieldDesc(field);
field = new org.apache.axis.description.ElementDesc();
field.setFieldName("hireFee");
field.setXmlName(new javax.xml.namespace.QName("", "HireFee"));
typeDesc.addFieldDesc(field);
};
/**
* Return type metadata object
*/
public static org.apache.axis.description.TypeDesc getTypeDesc() {
return typeDesc;
}
/**
* Get Custom Serializer
*/
public static org.apache.axis.encoding.Serializer getSerializer(
java.lang.String mechType,
java.lang.Class _javaType,
javax.xml.namespace.QName _xmlType) {
return
new org.apache.axis.encoding.ser.BeanSerializer(
_javaType, _xmlType, typeDesc);
}
/**
* Get Custom Deserializer
*/
public static org.apache.axis.encoding.Deserializer getDeserializer(
java.lang.String mechType,
java.lang.Class _javaType,
javax.xml.namespace.QName _xmlType) {
return
new org.apache.axis.encoding.ser.BeanDeserializer(
_javaType, _xmlType, typeDesc);
}
}