Soap 使用客户端存根时,前缀为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:

我必须使用axis来生成存根,因为我正在使用的SOAP使用RPC。将代码设置为post后,我将收到下面的堆栈跟踪。如果有人有这个问题,请帮助。通过在Eclipse中使用调试工具,我可以看到Axis使用的是默认前缀,但问题是它使用的其中一个前缀已经被使用,因此它返回null。有人知道为什么会这样吗

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,但仍然得到异常。不可为零的例外。还有别的想法吗?