Soap 使用客户端存根时,前缀为null
我必须使用axis来生成存根,因为我正在使用的SOAP使用RPC。将代码设置为post后,我将收到下面的堆栈跟踪。如果有人有这个问题,请帮助。通过在Eclipse中使用调试工具,我可以看到Axis使用的是默认前缀,但问题是它使用的其中一个前缀已经被使用,因此它返回null。有人知道为什么会这样吗Soap 使用客户端存根时,前缀为null,soap,null,axis,rpc,prefix,Soap,Null,Axis,Rpc,Prefix,我必须使用axis来生成存根,因为我正在使用的SOAP使用RPC。将代码设置为post后,我将收到下面的堆栈跟踪。如果有人有这个问题,请帮助。通过在Eclipse中使用调试工具,我可以看到Axis使用的是默认前缀,但问题是它使用的其中一个前缀已经被使用,因此它返回null。有人知道为什么会这样吗 AxisFault faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException faultSubcode:
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: java.io.IOException: java.io.IOException: Non nillable element 'prefix' is null.
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:java.io.IOException: java.io.IOException: Non nillable element 'prefix' is null.
at org.apache.axis.encoding.ser.BeanSerializer.serialize(BeanSerializer.java:275)
at org.apache.axis.encoding.SerializationContext.serializeActual(SerializationContext.java:1504)
at org.apache.axis.encoding.SerializationContext.serialize(SerializationContext.java:980)
at org.apache.axis.encoding.SerializationContext.outputMultiRefs(SerializationContext.java:1055)
at org.apache.axis.message.SOAPBody.outputImpl(SOAPBody.java:145)
at org.apache.axis.message.SOAPEnvelope.outputImpl(SOAPEnvelope.java:478)
at org.apache.axis.message.MessageElement.output(MessageElement.java:1208)
at org.apache.axis.client.Call.invoke(Call.java:2757)
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)
虽然这个问题在一年后没有得到回答,但我认为它可能会对您有所帮助,因为您正在使用RPC,可能是一个遗留系统 在生成的客户端存根中,使用Apache Axis进行打包,以xsd结尾,其中web服务提供程序的对象逐个创建开放类。 在课堂中间的某个地方,你会发现这样的静态块代码:
static {
typeDesc.setXmlType(...);
org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc();
elemField.setFieldName("prefix");
elemField.setXmlName(new javax.xml.namespace.QName("", "prefix"));
elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
elemField.setNillable(false);
typeDesc.addFieldDesc(elemField);
}
elemField.setNillable(true);
只需将nillable的值更改为true,如下所示:
static {
typeDesc.setXmlType(...);
org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc();
elemField.setFieldName("prefix");
elemField.setXmlName(new javax.xml.namespace.QName("", "prefix"));
elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
elemField.setNillable(false);
typeDesc.addFieldDesc(elemField);
}
elemField.setNillable(true);
如果所有类和这些类的所有字段与WSDL中相应的值不匹配,即根据WSDL的定义,它们可以为空,则应该对这些类和字段重复此操作
我注意到ApacheAxis1.2-1.4在默认情况下自动使属性不为“nillable”。我不知道为什么会出现这种情况,但我认为这就是解决方案。尽管一年后这个问题没有得到回答,但我认为这可能会对您有所帮助,因为您正在使用RPC,可能是一个遗留系统 在生成的客户端存根中,使用Apache Axis进行打包,以xsd结尾,其中web服务提供程序的对象逐个创建开放类。 在课堂中间的某个地方,你会发现这样的静态块代码:
static {
typeDesc.setXmlType(...);
org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc();
elemField.setFieldName("prefix");
elemField.setXmlName(new javax.xml.namespace.QName("", "prefix"));
elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
elemField.setNillable(false);
typeDesc.addFieldDesc(elemField);
}
elemField.setNillable(true);
只需将nillable的值更改为true,如下所示:
static {
typeDesc.setXmlType(...);
org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc();
elemField.setFieldName("prefix");
elemField.setXmlName(new javax.xml.namespace.QName("", "prefix"));
elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
elemField.setNillable(false);
typeDesc.addFieldDesc(elemField);
}
elemField.setNillable(true);
如果所有类和这些类的所有字段与WSDL中相应的值不匹配,即根据WSDL的定义,它们可以为空,则应该对这些类和字段重复此操作
我注意到ApacheAxis1.2-1.4在默认情况下自动使属性不为“nillable”。我不知道为什么会出现这种情况,但我认为这就是解决方案。还没有成功,因为我遇到了同样的问题,并成功地将值设置为true,但仍然得到了异常。不可为零的例外。还有其他想法吗?还没有成功,因为我有同样的问题,并设法将值设置为true,但仍然得到异常。不可为零的例外。还有别的想法吗?