调用weblogic部署的OASIS WSSE Web服务
我们在实现oasis wsse的weblogic上部署了webservice。然后我使用jboss中的wsconsume创建客户端(稍后尝试使用metro)并调用Web服务。它总是抛出一个错误,我试图在soapUI中创建一个测试客户端,发送成功,并发现由jboss产生的请求不匹配。调用weblogic部署的OASIS WSSE Web服务
有2差我发现: 1)DateToken: 工作:
< WSU:创建> 2011-09-06T08:22:14.515Z </WSU:创建>
不工作:
<的wsse:创建> 2011-09-07T06:12:37.322Z </WSS E:创建>
2.)密码类型: 工作:
<的wsse:密码类型=“http://docs.oasis-open.org/wss/2004/01/绿洲-200401-WSS-用户名令牌轮廓-1.0#PasswordDigest“> OB7izBPcPE0sfJaAEdD1uIrlFT4 = < /的wsse:密码>
不工作:
< wsse:Password Type ='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd#PasswordDigest'> trvFhf0ZCHQy4cBtNu984fs/nIg = </wsse :密码>
这是我如何调用从客户端的Web服务:
URL clientSideSecurityfile = new File("jboss-wsse-client.xml").toURI().toURL();
BindingProvider bp = (BindingProvider) port;
((StubExt) port).setSecurityConfig(clientSideSecurityfile.toExternalForm());
((StubExt) port).setConfigName("Standard WSSecurity Client");
bp.getRequestContext().put(StubExt.PROPERTY_AUTH_TYPE, StubExt.PROPERTY_AUTH_TYPE_BASIC);
bp.getRequestContext().put(StubExt.PROPERTY_CLIENT_TIMEOUT, 30000);
bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "usernmae");
bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "password");
responseACK = port.callWebService();
我使用jboss4.2.3,将JBossWS客户端3.0.1-native-2.0.4.GA。
任何想法如何解决这个问题?看来jbossws正在生成错误的wsse标签,它应该用于datetoken的wsu并输入密码: - ?.
按照UsernameToken的轮廓specification它应该是,
<wsu:Created>
凡
wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-
1.0.xsd"
另外,作为每说明书类型应该是,
Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest"
两者;
<wsse:Created>2011-09-07T06:12:37.322Z</wsse:Created>
而且
<wsse:Password Type='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd#PasswordDigest'>trvFhf0ZCHQy4cBtNu984fs/nIg=</wsse:Password>
是,不符合规范标准的...
嗨感谢您的快速回复,但显然jbossws本地生成这两个错误的标签,正如我所说的。任何在这方面的工作?也许使用其他堆栈: - ? – czetsuya
您可以使用Apache Axis2生成您的客户端。它带有名为wsdl2java的工具,用于从给定的wsdl生成客户端存根... –