2017-01-10 10 views
0

私はアクセスする必要のあるサービスからwsdlを提供しています。私はCXF V3.1.7を使用しています、それは提供されたwsdlでいくつかの問題を検出します。私は両方の問題を修正しました。しかし、ClassCastExceptionが発生で、有効なWSDL結果CXF wsdlによりClassCastExceptionがorg.apache.wss4j.policy.model.AlgorithmSuiteに送信されます

Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: org.apache.neethi.builders.PolicyContainingPrimitiveAssertion cannot be cast to org.apache.wss4j.policy.model.AlgorithmSuite 
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:161) 
    at com.sun.proxy.$Proxy68.creditSearch(Unknown Source) 
    at uk.co.example.service.TestServiceClient.directSearch(TestServiceClient.java:139) 
    at uk.co.example.service.TestServiceClient.main(TestServiceClient.java:71) 
Caused by: java.lang.ClassCastException: org.apache.neethi.builders.PolicyContainingPrimitiveAssertion cannot be cast to org.apache.wss4j.policy.model.AlgorithmSuite 
    at org.apache.wss4j.policy.model.AbstractBinding.parseNestedBindingPolicy(AbstractBinding.java:78) 
    at org.apache.wss4j.policy.model.AbstractBinding.<init>(AbstractBinding.java:43) 
    at org.apache.wss4j.policy.model.TransportBinding.<init>(TransportBinding.java:36) 
    at org.apache.wss4j.policy.builders.TransportBindingBuilder.build(TransportBindingBuilder.java:45) 
    at org.apache.wss4j.policy.builders.TransportBindingBuilder.build(TransportBindingBuilder.java:34) 
    at org.apache.neethi.AssertionBuilderFactoryImpl.invokeBuilder(AssertionBuilderFactoryImpl.java:138) 
    at org.apache.neethi.AssertionBuilderFactoryImpl.build(AssertionBuilderFactoryImpl.java:117) 
    at org.apache.neethi.PolicyBuilder.processOperationElement(PolicyBuilder.java:224) 
    at org.apache.neethi.PolicyBuilder.getAllOperator(PolicyBuilder.java:184) 
    at org.apache.neethi.PolicyBuilder.processOperationElement(PolicyBuilder.java:217) 
    at org.apache.neethi.PolicyBuilder.getExactlyOneOperator(PolicyBuilder.java:180) 
    at org.apache.neethi.PolicyBuilder.processOperationElement(PolicyBuilder.java:215) 
    at org.apache.neethi.PolicyBuilder.getPolicyOperator(PolicyBuilder.java:174) 
    at org.apache.neethi.PolicyBuilder.getPolicy(PolicyBuilder.java:124) 
    at org.apache.cxf.ws.policy.attachment.reference.LocalServiceModelReferenceResolver.resolveReference(LocalServiceModelReferenceResolver.java:53) 

WSDLファイルの関連部分は次のとおりです。

<wsp1:Policy sch0:Id="ConsumerServiceSoap11Policy"> 
<wsp1:ExactlyOne> 
    <wsp1:All> 
    <sp1:TransportBinding> 
     <wsp1:Policy> 
     <sp1:TransportToken> 
      <wsp1:Policy> 
      <sp1:HttpsToken RequireClientCertificate="false"> 
       <wsp1:Policy/> 
      </sp1:HttpsToken> 
      </wsp1:Policy> 
     </sp1:TransportToken> 
     <sp:AlgorithmSuite> 
      <wsp:Policy> 
       <sp:Basic256/> 
      </wsp:Policy> 
     </sp:AlgorithmSuite> 
     <sp1:Layout> 
      <wsp1:Policy> 
      <sp1:Lax/> 
      </wsp1:Policy> 
     </sp1:Layout> 
     <!--sp1:IncludeTimestamp/--> 
     </wsp1:Policy> 
    </sp1:TransportBinding> 

私はHttpsToken要素内に空のポリシー要素を追加し、CXFを作るためにAlgorithmSuite要素を追加しましたそれをCXF wsdl2javaに対して有効なものとして受け入れます。

ここには、関連するCXFの依存関係が記載されています。

<dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-frontend-jaxws</artifactId> 
     <version>${cxf.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-ws-policy</artifactId> 
     <version>${cxf.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-transports-http</artifactId> 
     <version>${cxf.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.wss4j</groupId> 
     <artifactId>wss4j-ws-security-common</artifactId> 
     <version>2.1.7</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-ws-security</artifactId> 
     <version>${cxf.version}</version> 
    </dependency> 

この例外を防止するにはどうすればよいですか?

+0

これはCXFのバグで、CXF開発者にバグをサポートするためのスタンドアロンのサンプルをビルドしようとしていると思います。 – csDave

答えて

0

名前空間の定義が混ざっているようです。 TransportBindingには「sp1:」がありますが、AlgorithmSuiteには「sp:」があります。

関連する問題