我没有成功使用 Axis 1.4 1855(根据axis.jar manifest.mf 文件)将对象数组传递给Java Web 服务。我正在使用 IntelliJ IDE 来帮助我构建它、生成 WSDL 并生成存根。
几周前,我成功创建了一个非常小的 Web 服务,它接受一个简单的请求对象(RequObj,它聚合了一些字符串、整数和双精度)并返回一个简单的响应对象(RespObj,也包含字符串、整数和双打)。这工作正常。
但是,当我尝试进行更改以将 RequObj 的数组而不是单个 RequObj 传递给服务时,出现错误:
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}hostname:JO007BI-BOU7
org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.
at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
... ETC
我向/从服务器发送/接收的类是非常基本的。当我将 RequObj 和 RespObj 都减少为一个字符串成员变量(m_reqString1 和 m_resString1)时,我得到了完全相同的错误。我在服务器中重新生成了 WSDL,在客户端中,我从服务器 WSDL 文件中重新生成了 Java 存根(显然还有请求和响应类文件)。我显然不是 WSDL 专家,但 WSDL 中似乎包含传递对象数组的正确内容。我还为请求和响应对象仅包含字符串的情况附加了 WSDL。
我真的被困住了,没有运气在各种论坛上对此进行调查。我看过你写的很多文章,但似乎都没有解决这个特定问题……如果我不能解决这个问题,我将不得不返回调用我自己的 Java DOM 函数来将我的请求/响应转换为 XML,我知道这是非标准的……</p>
这些是包含我的请求和响应定义的类。在我附加的文件中,我进一步简化了这些文件,使它们只包含单个 m_reqString1 和 m_resString1,在更简单的情况下我得到了同样的错误。
public class RequObj implements java.io.Serializable {
public java.lang.String m_reqString1;
public int m_reqInt1;
public double m_reqDouble1;
public java.lang.String m_reqString2;
public int m_reqInt2;
public double m_reqDouble2;
public java.lang.String m_reqString3;
public int m_reqInt3;
public double m_reqDouble3;
...
}
public class RespObj implements java.io.Serializable {
public java.lang.String m_resString1;
public int m_resInt1;
public double m_resDouble1;
public java.lang.String m_resString2;
public int m_resInt2;
public double m_resDouble2;
public java.lang.String m_resString3;
public int m_resInt3;
public double m_resDouble3;
...
}
我可以包含任何源文件(例如 WSDL、客户端代码、服务代码、存根代码等)如果有帮助的话(我相信它会),但我主要想先提出这个问题。如果有人想看到这个级别的细节,我会在这里提出我的问题。非常感谢 -