我是一个我无法控制的SOAP服务的客户机(在.NET中实现)。该服务提供一个WSDL。我使用Apache CXF从WSDL生成java客户机(具体地说,我使用Maven的cxf-codegen-plugin,它在底层使用wsdl2java)。
但是,当我实例化生成的服务类时,会记录以下警告:
Sep 04, 2014 5:18:00 PM [com.sun.xml.internal.ws.policy.EffectiveAlternativeSelector] selectAlternatives
WARNING: WSP0075: Policy assertion "{http://schemas.xmlsoap.org/ws/2005/07/securitypolicy}TransportBinding" was evaluated as "UNKNOWN".
Sep 04, 2014 5:18:00 PM [com.sun.xml.internal.ws.policy.EffectiveAlternativeSelector] selectAlternatives
WARNING: WSP0019: Suboptimal policy alternative selected on the client side with fitness "UNKNOWN".
错误是关于WSDL中的这个安全策略,我认为它说它不能理解:
<wsp:Policy wsu:Id="soap11_policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
<wsp:ExactlyOne>
<wsp:All>
<sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<wsp:Policy>
<sp:TransportToken>
<wsp:Policy>
<sp:HttpsToken RequireClientCertificate="false"/>
</wsp:Policy>
</sp:TransportToken>
<sp:AlgorithmSuite>
<wsp:Policy>
<sp:Basic256/>
</wsp:Policy>
</sp:AlgorithmSuite>
<sp:Layout>
<wsp:Policy>
<sp:Strict/>
</wsp:Policy>
</sp:Layout>
</wsp:Policy>
</sp:TransportBinding>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
然而,就我所知,这是一个非常普通的政策,没有什么不寻常的。当然应该理解?如何修复此警告?
下面是wsdl2java是如何调用的(摘自pom.xml)。
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<id>rh-soap-client-ssi</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${project.build.directory}/generated/cxf</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>https://example.org/ssi?wsdl</wsdl>
<extraargs>
<extraarg>-verbose</extraarg>
<extraarg>-client</extraarg>
<extraarg>-mark-generated</extraarg>
<extraarg>-exsh</extraarg>
<extraarg>true</extraarg>
<extraarg>-autoNameResolution</extraarg>
</extraargs>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-bindings-soap</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-ws-security</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-ws-policy</artifactId>
<version>3.0.1</version>
</dependency>
</dependencies>
</plugin>
通过猜测和查看maven central中的工件,我能够找到一个解决方案。
事实证明,为了实际理解和评估这个wsdl中的策略,必须提供缺少的运行时依赖项。对我来说,它是org.apache.cxf/cxf-rt-frontend-jaxws。我在任何地方都找不到这份文件。这将引入许多其他cxf依赖项,我不知道是否可以使用更少的一组依赖项。
一旦我包含了这个依赖项,当我实例化客户端对象时就不再得到警告了。(另外,实例化需要更长的时间!)
javax.xml.ws.soap.SOAPFaultException: None of the policy alternatives can be satisfied.
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:159)
...
因此,很可能每个使用此服务的人都可能收到此警告或类似的消息,如果实际检查了安全策略,就不可能使用此服务。我想我会接受警告。
在让IAM策略为我的SQS队列工作时遇到问题,我尝试了IAM策略模拟器。无论我的政策多么简单,它总是说它被拒绝了。 以下政策旨在允许对任何SQS资源采取任何行动。这是我附加到特定用户的一个策略,这就是没有指定主体的原因。 当我尝试在策略模拟器中运行这个列表队列操作时,我会被拒绝:隐式拒绝(没有匹配的声明)。这种说法怎么可能不符合呢? 以下是策略编辑器上被拒绝的截图:
我不明白的是,为什么这种行为一直如此?重置当前线程的状态,而不重置它所调用的线程的状态,这有什么原因吗?
我正试图从一个旧的串行设备反向工程通信协议。我已经搞清楚了大部分,但仍然停留在使用的CRC算法上。我有一个主机软件,我可以生成请求消息,所以我已经包括了一个由主机软件发送的相对较短的消息转储。 下面还有一些我还没有完全解码的数据字符串,前3个字符是从属地址(类似于modbus设备地址方案),接下来的2个字符是函数代码。“10”是一个数据缓冲区请求,我还没有解码。有趣的是,在这个特定的请求中有非数字
问题内容: 我知道我可以通过反射来获取对象的值,然后使用类型断言使用以下方法来获取实际对象: 但是,如果我不知道对象的类型是,该怎么办呢?说它在像这样的函数中: 在函数内部,您将永远不知道实际上将传递哪种类型的对象,那么如何完成类型声明? 问题答案: 你不能 类型断言使您可以利用语言为您提供的静态类型检查,即使您有一个接口,其类型不是静态检查的。基本上它是这样的: 你有一些静态类型的变量,它有型。
我一直在尝试使用Selenium来测试我的应用程序。我使用Selenium IDE编写了初始测试,但是,当我将IDE测试转换为Selenium Webdriver测试时,我的代码大约有一半出现了错误!因此,我正在处理每一个错误,试图让代码正常工作。 我在Web驱动程序中遇到的错误是 错误:捕获到异常[错误:定位器的未知策略[class][class=x-tool-close]] 在Selenium
GIL(global interpreter lock),全局解释器锁,是很多编程语言实现中都具有的特性,由于它的存在,解释器无法实现真正的并发。它也是 Python 中经常讨论的话题之一。 Python 作为编程语言存在多个具体实现,包括最常用的 CPython、超集 Cython、.NET 平台的 IronPython、JVM 上的 Jython,R 语言实现的 RPython、JIT 版本的