当前位置:  开发笔记 > 编程语言 > 正文

从Java调用.NET Web服务(WSE 2/3,WS-Security)

如何解决《从Java调用.NETWeb服务(WSE2/3,WS-Security)》经验,为你挑选了2个好方法。

我需要从Java调用用.NET编写的Web服务.Web服务实现了WS-Security堆栈(WSE 2或WSE 3,从我的信息中不清楚).

我从服务提供商处收到的信息包括WSDL,policyCache.config文件,一些示例C#代码以及可以成功调用服务的示例应用程序.

这听起来没那么有用,因为我不清楚我应该如何使用这些信息来编写Java客户端.如果Web服务请求未根据策略签名,则服务将拒绝该服务请求.我正在尝试使用Apache Axis2,我找不到任何有关如何使用policyCahce.config文件和WSDL来生成客户端的说明.

我在网上找到了几个例子,但在所有情况下,示例的作者都控制了服务和客户端,因此能够对双方进行调整以使其工作.我不在那个位置.

有人做过这个吗?



1> Zach..:

WS-Security规范通常不包含在WSDL中(从不在WSE WSDL中).所以wsdl2java不知道这项服务甚至需要WS-Security.WSE WSDL中不存在安全性约束这一事实对我来说是一个很大的失望(WCF将在WSDL中包含WS-Trust信息).

在客户端,您需要使用Rampart将必要的WS-Security标头添加到传出客户端消息中.由于WSDL不报告需要哪些WS-Security设置,因此最好向服务提供商询问所需的内容.WS-Security要求可能是简单的明文密码,或者可能是X509证书,或者可能是加密消息...... Rampart应该能够处理大多数这些场景.

通过在axis2.xml文件中使用模块来"打开"Apache Rampart.您需要下载Rampart模块并将其放在axis2目录中的特定位置,然后修改xml文件.您也可以以编程方式使用Rampart(如果需要,请编辑原始问题,我将编辑此响应).

根据您配置rampart的方式(通过其他XML文件或以编程方式),它将拦截任何传出消息并向其添加必要的WS-Security信息.我个人使用带有rampart的axis2来调用一个用明文用UsernameToken保护的WSE3服务,它工作得很好.类似但更高级的方案也应该有效.有关如何在上面链接的网站上设置和开始使用Rampart的详细信息.如果您对Rampart的具体问题或如何在您的特定WSE设置中使用Rampart有疑问,请编辑您的问题,我会尽力回答.



2> Michael Shar..:

这似乎是一个受欢迎的问题,因此我将概述我们在我们的情况下所做的工作.

似乎用.NET构建的服务遵循较旧的ws-addressing标准(http://schemas.xmlsoap.org/ws/2004/03/addressing/),而axis2只能理解较新的标准(http:// schemas. xmlsoap.org/ws/2004/08/addressing/).

此外,提供的policyCache.config文件采用axis2 rampart模块无法理解的形式.

所以我们必须采取的步骤,简而言之:

阅读policyCache.config并尝试理解它.然后将其重写为一个可以理解的策略.(一些更新的文档有帮助.)

使用此策略配置rampart.

获取.pfx文件中提供的密钥并将其转换为Java密钥库.Jetty附带的实用程序可以做到这一点.

使用该密钥库配置rampart.

编写一个自定义的axis2处理程序,它将来自axis2的较新的ws-addressing东西反向转换为服务所期望的旧东西.

配置axis2以在传出消息上使用处理程序.

最后,很多配置和代码都应该是供应商支持的开放标准.

虽然我不确定替代方案是什么......你可以等待供应商(或者在这种情况下,是一家供应商)确保一切都是互操作的吗?

作为后记我会补充一点,我最终没有完成这项工作,这是我团队中的其他人,但我认为我的重要细节是正确的.我正在考虑的另一个选项(在我的队友接手之前)是直接调用WSS4J API来构建SOAP信封,就像.NET服务所期望的那样.我认为这也会奏效.


每个人都应该记住,WSE已经过时了.这是一个允许.NET Web服务使用新兴WS-*堆栈的临时解决方案.如果它不支持最终标准,那就不足为奇了.WCF _does_支持WS-*协议的最终标准版本.它取代了WSE,应该用于所有新开发.应尽快替换WSE代码.
推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有