问题标签 [wsit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
web-services - WSIT、Maven 和 wsimport——它们可以一起工作吗?
我正在 Maven 中开发一个小型的多模块项目。我们已经使用 Web 服务将 UI 与数据库层分离,并且多亏了 jaxws-maven-plugin,WSDL 和 WS 客户端的创建或多或少地为我们处理了。(该插件本质上是 wsgen 和 wsimport 的包装器。)到目前为止一切都很好。
当我尝试将 WSIT 安全性分层到图片中时,问题就出现了。NetBeans 允许我轻松地生成安全元数据,但 wsimport 似乎完全无法处理超出基本身份验证级别安全性的任何内容。
这是我们当前在 Maven 构建期间调用 wsimport 的不安全方式:
我尝试过使用 xauthFile、xadditionalHeaders、通过 args 传递 javax.xml.ws.security.auth.username 和密码。我还尝试使用命令行中的 wsimport 来指向 Tomcat 生成的 WSDL,它具有额外的安全信息。然而,似乎根本没有改变 wsimport 生成的文件的组成。
所以我想我的问题是,为了获得一个符合 WSIT 的客户端,我是否完全放弃了 Maven 和 jaxws 插件?有没有办法让 WSIT 客户端自动生成?还是我需要手动生成客户端?
让我知道您是否需要我在这里写的以外的任何其他信息。我正在部署到 Tomcat,尽管这似乎不是问题,因为 Maven 似乎很乐意将 Metro 拉到部署的 WAR 文件中。
提前致谢!
编辑:在玩了很多 WSIT 之后,这对我有用。
对于初学者,使用 Netbeans 生成 WSIT 客户端。对其进行测试以确保其正常工作,然后将 WSIT 配置文件(wsit-client.xml 和 [您的 Web 服务名称].xml)移动到 WS 客户端项目的 META-INF 目录中。
从安全的角度来看,与您的项目相关的是 Web 服务 xml 中的标记:
显然,这里有一些硬编码的依赖项,我们需要在构建期间进行管理。用户、密码、信任库的位置和 peeralias 都是开发默认值,并且会随着系统从开发进入测试和生产而改变。我们正在尝试一些不同的策略来管理它,但我们最终可能会在 Hudson 中设置环境变量以构建每个环境。
稍微摆弄一下Maven的jaxws插件的配置。我们生成 WSDL 作为构建的一部分,因此我们不需要在本地引用它。这是我们的 WS 客户端目标中 wsimport 命令的插件标记:
最后,当然,确保所有需要调用 Web 服务的项目都正确设置了 Metro 依赖项。
java - 使用 Metro 的 Ws-Security 标头
我有一个实现 WS-Security 但没有在 WSDL 中定义策略的 Web 服务。我能够使用 Axis 2 作为客户端成功使用此 Web 服务。
我正在尝试使用 Metro 2 使用相同的 Web 服务,但 wsse:security 标头没有。仅当服务定义了不受我控制的安全策略时,它才有效。我通过创建示例 Web 服务对此进行了测试,除非我定义策略,否则我的 Metro 客户端永远不会发送 wsse:security 标头。
使用 Metro 有什么我遗漏的吗?
编辑 - - - - - - - - - - - - - - - - - - - - - - - - - -----------------------------------------
我创建了 wsdl 的本地副本并在其中定义了策略。我使用这个 wsdl 创建了 Web 服务客户端,但仍然没有安全标头。wsit-client.xml 文件看起来不错。我什至将所有配置与定义策略的 Web 服务的客户端进行了比较,并且配置相同,但仍然无法正常工作。到目前为止,我的结论是 Metro 客户端需要实际的 Web 服务定义策略。
编辑 - - - - - - - - - - - - - - - - - - - - - - - - - --------------------------------------
wsit-client.xml 的内容
NewWebService.xml 与 wsit-client.xml 一起位于并包含以下策略信息
在绑定中这样引用 -
更改后的 wsdl 包含此策略 -
java - WSIT/Metro 不理解安全 SOAP 标头
我正在使用 WSIT/Metro 创建一个简单的 Web 服务。当客户端尝试使用简单的用户名/密码身份验证方案连接时,我在服务器上收到以下错误:
我不知道如何让 WSIT 理解 Security 块。
我从客户那里得到的请求:
服务器的 WSDL:
我的代码,设置服务器:
java - Metro & StreamBuffer 命名空间错误 - 我理解正确吗?
总而言之,我(仍在)致力于从 Java/Metro 2.0 调用 WSE 3.0 .NET Web 服务。我们已经设置了安全要求,以便我们加密消息的正文和标头并签署标头。我能够向他们的服务发送请求并获得响应,但 Metro 无法验证签名并从 WSIT 代码中引发错误。我从 CVS 获得了最新的 WSIT 代码,这是该方法的代码片段:
来自 com.sun.xml.ws.security.opt.impl.incoming.GenericSecuredHeader:
如您所见,其中有一个 TODO,我认为这表明该方法无法处理我所遇到的情况,但我不确定我是否知道它们所说的“范围内”命名空间是什么意思。
这是它正在中断的 Web 服务响应中的 XML 片段:
在堆栈跟踪(包括在下面)中,它抱怨无法验证引用 URI="#Id-46282a5d-c7fa-403c-8ac9-f7df0dfdb0cf"。 我不清楚的是 - 它是否因为 Reference 元素没有命名空间属性或前缀而失败? 应该允许他们从父 Signature 元素继承命名空间,还是 StreamBuffer 类不能处理?
相比之下,这是我的请求(由 WSIT 生成)中的一个类似 XML 片段,其中 ds 前缀是
xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
当 Metro 生成这些块时,所有内容都有一个命名空间前缀。
如果你还在读这么远 - 谢谢!以下是堆栈跟踪的一些片段:
java - Netbeans webservice 客户端仅在从 IDE 运行时才有效
使用 Netbeans 6.8 和 metro 2.0 我编写了一个简单的应用程序,它调用 web 服务并在 java swing 组件中显示结果。当我在 Netbeans IDE 中运行应用程序时(使用 F6),应用程序运行良好。
但是,当我尝试从 dist 文件夹中的 .jar 文件运行编译的应用程序时,我的 Swing UI 出现了,但是当我按下导致我的 Web 服务被调用的按钮时,什么也没有发生。
有谁知道我怎样才能让它工作?
ant - Ant WSGEN WSDL 生成 - 包括 WSIT 策略定义
我正在使用 WSGEN Ant 任务从服务类生成 WSDL。该任务运行良好并生成所需的 WSDL。我遇到的问题是试图让它在 WSDL 的顶部合并 WSIT 策略定义。
当我在 Netbeans 中部署服务时(即不使用 Ant 来处理 WSGEN),Netbeans 会生成一个包含 WSIT 策略定义的 WSDL 文件。WSIT 策略包含在 Netbeans 生成的 XML 文件中 - web-inf/wsit-com.mypackage.web.webservice.jaxws.MyServiceService.xml。
我已将此文件的位置添加到 WSGEN 任务的类路径中,因此它应该能够检测到它。但是,由 WSGEN 任务创建的 WSDL 不包括 WS Policy 定义。
似乎没有任何参数可以传递给 Ant 任务来告诉它包含 WS-Policy。不过,在后台,WSGEN 任务使用的 wsgen 与 Netbeans 使用的相同,即来自 glassfishv2/lib/webservices-tools.jar 的那个。
有没有人幸运地让 Ant 任务包含 WS-Policy 定义?我究竟做错了什么?
干杯,
Ĵ
java - 将 wsit-client.xml 中的位置导入另一个 jar 中的文件,使用 URL 字符串在类路径中定位文件
通常 wsit-client.xml 具有如下导入语句:
我发现他们可以在 classpath/META-INF 上在线一个 wsit-client.xml,但是我可以引用一个位于该 wsit-client.xml 中另一个 jar 中的 xml 吗?就像是 :
我想创建一个 wsit-client.xml,其中包含我所有 Web 服务的导入,但我想将所有不同 Web 服务的配置分离到不同的项目中。
jax-ws - 从单个 Metro 客户端访问两个不同的启用安全性的 Web 服务
一个类似的问题被发布为question:is-there-a-way-to-use-multiple-wsit-client-xml ..。我使用Metro 客户端有两个不同的启用WS-Security的 Web 服务,我想使用单个客户端访问它们。我相信这将需要在客户端项目中定义两个wsit-client.xml 。是否可以定义两个 wsit-client.xml 文件?还是我错过了什么。我相信使用 Axis2 +rampart 可以通过使用两个不同的策略文件来实现。我试图避免使用 Axis2+rampart,因为这将需要添加大约 70 个 jar,并且类路径中已经有 50 个 jar 的几个模块。
java - 重命名使用 wsimport 生成的所有异常类
当使用 .net wsdl 使用 wsimport 生成我的代码时,我有极长的异常类,例如 [servicename][operationname]FaultFaultFaultMessage。
我知道如何重命名每个异常,但我可以使用 jaxb .xjb 文件一次“模板化”所有异常吗?
wcf - 使用 WSIT/JAX-WS 的 HTTP 元数据请求
我在针对 .NET STS 和安全 Web 服务运行 Java(使用 Metro)客户端时遇到问题。但是,当我运行基于 .NET 的客户端时,它总是可以工作。
您可能已经知道,当运行 JAX-WS 客户端时,它会在运行时向服务请求元数据(即使它在设计时已经运行了 wsimport)。但是,似乎这个运行时元数据请求是我的问题所在。
我面临的问题是,在元数据的运行时请求期间,我的 WCF 服务导出的一些 WSDL 导致 Java 客户端在 mex 请求期间只是“挂起”。当它挂起时,它甚至没有到达发出 RST 请求的地步。
例如,我可以到达一个我有 9 个 [OperationContract] 属性的地方并且它可以工作。但是当我添加第 10 个服务方法时,它不起作用。但是,如果我删除 9 个中的一个,则它可以工作。我知道特定方法没有问题,因为我可以混合和匹配并且保持相同的模式。
我似乎无法推断出某些 WSDL 有效而某些无效的模式或原因。我强烈怀疑服务方法的数量是有限的。但是,这可能是导出的 WSDL 的“整体复杂性”问题吗?
有没有人有任何想法?有没有人遇到过这个问题?
如果需要更多信息,我很乐意发布。我只是想让最初的帖子保持可管理的长度。
我还要补充一点,我在 .NET 4 中运行 STS 和安全 Web 服务,它们基于 WIF(所以我不必担心安全设置)。我的 .NET 客户端也是 .NET 4。在 Java 方面,我使用 Netbeans 6.9.1 和运行 Glassfish 3 的 Metro 2.1。我已经验证在 Metro 2.0 上运行时遇到了同样的问题。