SOAPUI生成的JAVA客户端抛出MustUnderstandHeader不被理解错误

SOAPUI生成的JAVA客户端抛出MustUnderstandHeader不被理解错误,java,web-services,soap,wsdl,soaphandler,Java,Web Services,Soap,Wsdl,Soaphandler,这是我在这里的第一篇帖子,请耐心等待。我有一个WSDL,我使用SOAP UI生成Java客户机。我将客户端插入到一个测试项目中,并使用客户端访问web服务。web服务需要安全头(它不是wsdl策略的一部分),因此我必须使用处理程序向创建的SOAP信封添加安全头。在运行我的程序时,它抛出以下错误。。。 当我通过soapui运行相同的SOAP请求时,它似乎处理得很好。 我注意到的另一件有趣的事情是,尽管我在客户端处理了相同的请求(包括安全头的nonce)后,在soapui中运行了相同的请求(抛出错误

这是我在这里的第一篇帖子,请耐心等待。我有一个WSDL,我使用SOAP UI生成Java客户机。我将客户端插入到一个测试项目中,并使用客户端访问web服务。web服务需要安全头(它不是wsdl策略的一部分),因此我必须使用处理程序向创建的SOAP信封添加安全头。在运行我的程序时,它抛出以下错误。。。 当我通过soapui运行相同的SOAP请求时,它似乎处理得很好。 我注意到的另一件有趣的事情是,尽管我在客户端处理了相同的请求(包括安全头的nonce)后,在soapui中运行了相同的请求(抛出错误后),但它似乎仍然处理得很好。但是,当我尝试在soapui中运行同一个请求两次时,它会抛出一个异常,即不能多次使用相同的Nonce值(这是预期的行为)。这使我认为,运行客户端后生成的错误甚至没有到达运行web服务的服务器,否则nonce将被缓存在那里,我将无法在SOAP UI中运行它。我已将我的处理程序类方法附加到错误块下面。我倾向于相信安全头是好的,因为消息在soapui中处理得很好。 感谢您的帮助

javax.xml.ws.soap.SOAPFaultException:MustUnderstand头:[{}安全]未被理解 位于com.sun.xml.internal.ws.protocol.soap.MUTube.createMUSOAPFaultException(未知源) 位于com.sun.xml.internal.ws.protocol.soap.ClientMUTube.processResponse(未知源) 位于com.sun.xml.internal.ws.api.pipe.Fiber.\uuuu-doRun(未知来源) 位于com.sun.xml.internal.ws.api.pipe.Fiber.\u doRun(未知来源) 位于com.sun.xml.internal.ws.api.pipe.Fiber.doRun(未知源) 位于com.sun.xml.internal.ws.api.pipe.Fiber.runSync(未知源) 位于com.sun.xml.internal.ws.client.Stub.process(未知源) 位于com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(未知源) 位于com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(未知源) 位于com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(未知源) 位于com.sun.xml.internal.ws.client.sei.SEIStub.invoke(未知源) com.sun.proxy.$Proxy34.searchDemographics(未知来源) 位于com.douglas.client.client.main(client.java:50)

公共布尔handleMessage(SOAPMessageContext smc){


找到了解决方案。客户端抛出这些错误的原因是,当它从web服务接收到响应时,mustUnderstand设置为“1”。现在,由于WSDL策略不包括安全组件,客户端不知道如何处理它。解决方法是在头中添加以下方法java类

 public Set getHeaders() {
        final QName securityHeader = new QName(  
                "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd",  
                "Security", "wsse");  

        final HashSet<QName> headers = new HashSet<QName>();  
        headers.add(securityHeader);  
        return headers;  

        //throw new UnsupportedOperationException("Not supported yet.");
    }
publicsetgetheaders(){
最终QName securityHeader=新QName(
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd",  
“担保”、“wsse”);
final HashSet headers=new HashSet();
headers.add(securityHeader);
返回标题;
//抛出新的UnsupportedOperationException(“尚未支持”);
}

我需要实现哪些拦截器?我真的遇到了这个错误。请您在这里指导我:?
 public Set getHeaders() {
        final QName securityHeader = new QName(  
                "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd",  
                "Security", "wsse");  

        final HashSet<QName> headers = new HashSet<QName>();  
        headers.add(securityHeader);  
        return headers;  

        //throw new UnsupportedOperationException("Not supported yet.");
    }