当前位置: 首页 > 知识库问答 >
问题:

WSP0075:策略断言“TransportBinding”被计算为“未知”。为什么?

王轶
2023-03-14

我是一个我无法控制的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>

共有1个答案

吴涵育
2023-03-14

通过猜测和查看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 版本的