【发布时间】:2014-11-12 16:15:41
【问题描述】:
我正在开发一个 Web 服务客户端消费者。
客户端类是使用 cxf wsdltojava 代码生成器生成的。
当我在 tomcat 中运行客户端时,一切正常,但是当我将客户端部署到 WebSphere 7.0,我收到解组器错误:
org.apache.axis2.jaxws.wrapper.impl.JAXBWrapperException: An internal assertion
error occurred. The com.mycompany.webservice.model.LoginResponse JAXB object does not have a LoginResponse xml property.
at org.apache.axis2.jaxws.wrapper.impl.JAXBWrapperToolImpl.unWrap(JAXBWrapperToolImpl.java:83)
at org.apache.axis2.jaxws.marshaller.impl.alt.DocLitWrappedMethodMarshaller.demarshalResponse(DocLitWrappedMethodMarshaller.java:144)
... 16 more
wsdl 是这样的:
<xsd:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
...
<xsd:element name="LoginResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="1" maxOccurs="1" name="LoginResult" type="xsd:boolean"/>
<xsd:element minOccurs="0" maxOccurs="1" name="ticketID" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
实体响应类是:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"loginResult",
"ticketID"
})
@XmlRootElement(name = "LoginResponse")
public class LoginResponse {
@XmlElement(name = "LoginResult")
protected boolean loginResult;
protected String ticketID;
服务等级是:
@WebService(targetNamespace = "http://tempuri.org/", name = "AuthenticationSoap")
@XmlSeeAlso({ObjectFactory.class})
public interface AuthenticationSoap {
@RequestWrapper(localName = "Login", targetNamespace = "http://tempuri.org/", className = "com.mycompany.webservice.model.Login")
@WebMethod(operationName = "Login", action = "http://tempuri.org/Login")
@ResponseWrapper(localName = "LoginResponse", targetNamespace = "http://tempuri.org/", className = "com.mycompany.webservice.model.LoginResponse")
@WebResult(name = "LoginResponse", targetNamespace = "http://tempuri.org/")
public LoginResponse login(
@WebParam(mode = WebParam.Mode.IN, name = "username", targetNamespace = "http://tempuri.org/")
java.lang.String username,
@WebParam(mode = WebParam.Mode.IN, name = "password", targetNamespace = "http://tempuri.org/")
java.lang.String password,
@WebParam(mode = WebParam.Mode.INOUT, name = "ticketID", targetNamespace = "http://tempuri.org/")
javax.xml.ws.Holder<java.lang.String> ticketID,
@WebParam(mode = WebParam.Mode.OUT, name = "LoginResult", targetNamespace = "http://tempuri.org/")
javax.xml.ws.Holder<java.lang.Boolean> loginResult
);
}
有没有人知道我的定义中有什么问题?
真诚的。
【问题讨论】: