我是我不控制的SOAP服務的客戶端(在.NET中實現)。該服務提供了一個WSDL。我使用Apache CXF從WSDL生成java客戶端(具體來說,我使用的是Maven的cxf-codegen插件,它使用了wsdl2java)。WSP0075:策略斷言「TransportBinding」被評估爲「UNKNOWN」。爲什麼?
然而,當我實例生成的服務類,下面的警告記錄:
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)。
-exsh true
arg和cxf-rt-bindings-soap
依賴關係是因爲WSDL在其參數中使用了一些隱含的soap頭部,並且我需要它以便它們正確地包含在生成的服務類方法中。
我添加了cxf-rt-ws-security
和cxf-rt-ws-policy
依賴項來嘗試修復此警告,認爲可能沒有包括安全和策略信息。然而,這並沒有解決任何問題(儘管也沒有破壞任何東西)。
<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>
很高興知道。感謝聯合調查。 – 2014-09-12 04:30:41
那麼,你是如何結束調用服務才能獲得警告而不是異常的?我得到的消息是沒有任何可以滿足的策略選項(我的pom.xml中已經有cxf-rt-frontend-jaxws依賴項) – ronnyfm 2016-08-10 15:12:01
@ronnyfm警告是當我做了_not_包括cxf-rt-frontend-jaxws ,所以這就是我現在所做的。 – 2016-08-11 07:51:05