我没有成功使用Axis 1.4 1855将一组对象传递给Java Web服务(根据axis.jar manifest.mf文件)。我正在使用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)
...等
我向/从服务器发送/接收的类是非常基本的。当我将RequObj和RespObj简化为单个String成员变量(m_reqString1和m_resString1)时,我得到完全相同的错误。我在服务器中重新生成了WSDL,在客户端中,我从服务器WSDL文件重新生成了Java存根(显然也是请求和响应类文件)。我显然不是WSDL专家,但WSDL似乎有正确的东西来传递一个对象数组。我还附加了WSDL,用于请求和响应对象仅包含字符串的情况。
我真的陷入困境,并且在各种论坛上没有运气调查这一点。我已经看过很多你写过的文章,但似乎都没有解决这个问题......如果我不能解决这个问题,我将不得不回过头来调用我自己的Java DOM函数来将我的请求/响应变成XML,我知道这是非标准的...
这些是包含我的请求和响应定义的类。在我附加的文件中,我更简化了这些文件,以便它们只包含单个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,客户端代码,服务代码,存根代码等),如果这会有所帮助(我确定会这样),但我最想提出问题。如果有人想看到这种程度的细节,我会在这里提出我的问题。非常感谢 -