如何将身份验证标头添加到Web服务存根?

时间:2013-03-28 07:57:13

标签: java web-services authentication soap cxf

我在Eclipse和RAD 7.0中使用Apache CXF,IBM Jax-WS和Axis生成了存根。

在以上3个场景中,它给出了以下异常

Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: ARERR [149] A user name must be supplied in the control record

搜索后我得出结论,我必须将身份验证信息添加到客户端存根创建的Soap头中。

我在这个链接上尝试了答案

How do you add a Soap Header defined in a wsdl to a web service client in CXF?

但无法成功。我是SOAP和WebServices的新手

所以,如果有人对此有所帮助,请帮助。

1 个答案:

答案 0 :(得分:1)

我几天前遇到过这个问题,这对我来说很头疼。生成存根时,必须将标志 -XadditionalHeaders 添加到wsimport命令。

"C:\Program Files\Java\jdk1.X.X_XX\bin\wsimport.exe" -p com.company.package -keep -XadditionalHeaders -d folder1 http://mywsdllocation.com/doc.wsdl

其中: -p:包含生成的类的包 -keep:保留.java文件(否则只会获取.class文件) -XadditionalHeaders:将创建用于身份验证的类 -d:将放置生成的类的文件夹。

之后,您只需将生成的java文件复制到您选择的包(在本例中为com.company.package)下的项目中。然后,您可以创建一个AuthenticationInfo对象并将其插入到stub方法的调用中,如下所示:

WSService service = new WSService(); 
WSPortTypePortType port = service.WSPortTypeSoap();
AuthenticationInfo auth = new AuthenticationInfo();
auth.setUserName(yourUsername);
auth.setPassword(yourPassword);
port.method(param1,param2,auth);

希望它有所帮助!