2

我已经在 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 标头中。

我试过这个链接上的答案

如何将 wsdl 中定义的 Soap Header 添加到 CXF 中的 Web 服务客户端?

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

因此,如果有人对此进行了研究,请提供帮助。

4

1 回答 1

2

几天前我遇到了这个问题,这让我很头疼。生成存根时,您必须将标志-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 对象并将其插入到存根方法的调用中,如下所示:

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

希望能帮助到你!

于 2014-02-20T10:21:32.163 回答