2017-01-10 11 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 :"가 있습니다.