soap - 使用客户端 stub 时前缀为空

标签 soap null axis rpc prefix

我必须使用 axis 来生成 stub ,因为我正在使用的 SOAP 使用 RPC。设置要发布的代码后,我收到以下堆栈跟踪。如果有人遇到过这个问题,请帮忙。通过使用 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 的客户端 stub 中,该 stub 以“_xsd”结尾,其中 Web 服务提供者的对象被一一创建为开放类。 在类中间的某个地方,您会发现如下静态 block 代码:

 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);
}

只需将 nillable 的值更改为 true,如下所示:

elemField.setNillable(true);

如果所有类和这些类的所有字段与 WSDL 中的相应值不匹配(即,根据 WSDL 的定义,它们可以为空),您应该对它们重复此操作。

我注意到 Apache Axis 1.2 - 1.4 默认情况下自动使属性不为“nillable”。我不知道为什么会这样,但我认为这就是解决方案。

关于soap - 使用客户端 stub 时前缀为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14217597/

相关文章:

c - 在 C 中递增 NULL 指针

r - 使用 abline(lm()) 时无法添加 axis() 进行绘图,为什么?

java - Ant javac 任务出错 : [javac] warning: [options] bootstrap class path not set in conjunction with -source 1. 6

c# - 静态函数返回新对象总是设置为空

postgresql - 如何在 PostgreSQL 上添加条件唯一索引

python - 如何在长度不同的 Axis 上添加等距刻度? [Python]

.net - 如何从.NET生成的SOAP客户端而不是序列化的对象获得原始XML响应?

php - 无法使用 mustUnderstand 设置 SOAP header

java - 我可以将 xml 有效负载作为字符串发送到soap web 服务吗

java - @SOAPBinding(style = Style.RPC) 用于返回 ArrayList 的 Web 方法