Java 使用CXF生成的客户端时出现意外的包装器元素

Java 使用CXF生成的客户端时出现意外的包装器元素,java,soap,wsdl,cxf,Java,Soap,Wsdl,Cxf,我已经使用CXF的wsdl2java为Web服务生成了一个客户端 客户端连接正常,但抛出一个expection,抱怨找到的响应与预期响应不匹配 May 22, 2013 3:44:46 PM org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromWSDL INFO: Creating Service {http://www.service-now.com/cmdb_ci_comm}ServiceNo

我已经使用CXF的wsdl2java为Web服务生成了一个客户端

客户端连接正常,但抛出一个expection,抱怨找到的响应与预期响应不匹配

May 22, 2013 3:44:46 PM org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromWSDL
INFO: Creating Service {http://www.service-now.com/cmdb_ci_comm}ServiceNow_cmdb_ci_comm from WSDL: file:/C:/Dev/Workspaces/Eclipse/clim20130508/ServiceNowCXFClient/bin/service-now.wsdl
Invoking getRecords...
May 22, 2013 3:44:51 PM org.apache.cxf.phase.PhaseInterceptorChain doDefaultLogging
WARNING: Interceptor for {http://www.service-now.com/foo}ServiceNow_foo#{http://www.service-now.com/foo}getRecords has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: Unexpected wrapper element getRecordsResponse found.   Expected {http://www.service-now.com/foo}getRecordsResponse.
at org.apache.cxf.interceptor.DocLiteralInInterceptor.handleMessage(DocLiteralInInterceptor.java:100)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271)
at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:800)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1592)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1490)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1309)
at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:622)
at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271)
at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:530)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:463)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:366)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:319)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96)
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:133)
at com.sun.proxy.$Proxy29.getRecords(Unknown Source)
at com.service_now.cmdb_ci_comm.ServiceNowSoap_ServiceNowSoap_Client.main(ServiceNowSoap_ServiceNowSoap_Client.java:178)
显然,收到的响应与预期响应的不同之处在于后者包含名称空间

getRecordsResponse found.   Expected {http://www.service-now.com/foo}getRecordsResponse
我的服务客户端打开如下

@WebServiceClient(name = "ServiceNow_foo", 
              wsdlLocation = "service-now.wsdl",
              targetNamespace = "http://www.service-now.com/foo") 
public class ServiceNowFoo extends Service {

    public final static URL WSDL_LOCATION;

    public final static QName SERVICE = new QName("http://www.service-now.com/foo", "ServiceNow_foo");
    public final static QName ServiceNowSoap = new QName("http://www.service-now.com/foom", "ServiceNowSoap");
您可以在问题中看到客户机代码


关于错误配置是什么,您有什么想法吗?

尽管这是一个长期封闭的错误,但可以在这里找到解释

当ServiceNow公开的WSDL具有
elementFormDefault=“unqualified”
时,我在CXF和ServiceNow中也遇到了同样的问题。我注意到生成的
package info.java
没有正确的
@javax.xml.bind.annotation.XmlSchema
注释,因为它缺少
elementFormDefault=XmlNsForm.UNQUALIFIED
我正在使用CXF 3.2.4和Glassfish java xml Binding 2.3.0

使客户端工作的一种解决方法是将ServiceNow中的
glide.wsdl.schema.UnqualifiedElementFormDefault
参数设置为
false