我正在使用apache cxf创建一个soap客户端。我使用了一个网络钩子来捕获数据并在Http标头中找到SOAPAction为空
SOAPAction:“”
下面是代码
URL wsdlurl=SOAPWebServiceTransport.class.getClassLoader().
getResource("my.wsdl");
OnlinePort service= new OnlinePortService(wsdlurl).getOnlinePortPort();
Client proxy = ClientProxy.getClient(service);
// Provides WS-Security
WSS4JOutInterceptor wss4jOut = new WSS4JOutInterceptor();
wss4jOut.setProperty("action", "UsernameToken");
wss4jOut.setProperty("user", userName);
wss4jOut.setProperty("passwordType", "PasswordText");
wss4jOut.setProperty("password", password);
wss4jOut.setProperty(WSHandlerConstants.ADD_UT_ELEMENTS,
WSConstants.NONCE_LN + " " + WSConstants.CREATED_LN);
wss4jOut.setProperty(WSHandlerConstants.PW_CALLBACK_CLASS, ServerPasswordCallback.class.getName());
proxy.getEndpoint().getOutInterceptors().add(wss4jOut);
setConduitProperties((HTTPConduit) proxy.getConduit(),url);
在setConduitProperties中,我只是设置一些http属性。
在调查此问题时,我找到了解决方法
Map<String, List<String>> headers = new HashMap<String, List<String>>();
headers.put("SOAPAction", Arrays.asList("myPrefix:mySoapMethod"));
proxy.getRequestContext().put(Message.PROTOCOL_HEADERS, headers);
但是问题是,如果我有多个方法,则在Http标头中将所有方法放入
SOAPAction:“ myPrefix:mySoapMethod,myPrefix:mySoapMethod2”
有没有更好的解决方案来解决这个问题?
最佳答案
我建议为每个请求设置SOAPAction标头。否则,服务器将无法确定您要调用哪个方法。