2016-11-23 17 views
0

WSDL 스키마에서 POJO가 생성되었지만 오류가 적절한 @Webfault 예외로 매핑되지 않은 것처럼 보입니다. AXLError을받는 대신 ServerSOAPFaultException을받습니다.SOAP - 적절한 @WebFault 예외 대신 ServerSOAPFaultException이 throw됩니다.

생성 된 예외 파일 : 다음 예외가 발생

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Body> 
     <soapenv:Fault> 
     <faultcode>soapenv:Client</faultcode> 
     <faultstring>Cannot insert or update pattern. A DN exists with the same pattern and partition.</faultstring> 
     <detail> 
      <axlError> 
       <axlcode>4052</axlcode> 
       <axlmessage>Cannot insert or update pattern. A DN exists with the same pattern and partition.</axlmessage> 
       <request>addLine</request> 
      </axlError> 
     </detail> 
     </soapenv:Fault> 
    </soapenv:Body> 
</soapenv:Envelope> 

: 내가받을 결코 왜

com.sun.xml.internal.ws.fault.ServerSOAPFaultException: Client received SOAP Fault from server: Cannot insert or update pattern. A DN exists with the same pattern and partition. Please see the server log to find more detail regarding exact cause of the failure. 
    at com.sun.xml.internal.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:178) 
    at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:124) 
    at com.sun.xml.internal.ws.client.sei.StubHandler.readResponse(StubHandler.java:238) 
    at com.sun.xml.internal.ws.db.DatabindingImpl.deserializeResponse(DatabindingImpl.java:189) 
    at com.sun.xml.internal.ws.db.DatabindingImpl.deserializeResponse(DatabindingImpl.java:276) 
    at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:104) 
    at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:77) 
    at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:147) 
    at com.sun.proxy.$Proxy135.addLine(Unknown Source) 
    at com.company.product.provisioning.AxlApi.addLine(AxlApi.java:243) 
... 

당신이 날 지점 시겠어요

package com.cisco.axlapiservice; 

import javax.xml.ws.WebFault; 


/** 
* This class was generated by Apache CXF 3.1.8 
* 2016-11-13T14:30:37.692+02:00 
* Generated source version: 3.1.8 
*/ 

@WebFault(name = "axlError", targetNamespace = "http://www.cisco.com/AXL/API/11.5") 
public class AXLError extends Exception { 

    private com.cisco.axl.api._11.AXLError axlError; 

    public AXLError() { 
     super(); 
    } 

    public AXLError(String message) { 
     super(message); 
    } 

    public AXLError(String message, Throwable cause) { 
     super(message, cause); 
    } 

    public AXLError(String message, com.cisco.axl.api._11.AXLError axlError) { 
     super(message); 
     this.axlError = axlError; 
    } 

    public AXLError(String message, com.cisco.axl.api._11.AXLError axlError, Throwable cause) { 
     super(message, cause); 
     this.axlError = axlError; 
    } 

    public com.cisco.axl.api._11.AXLError getFaultInfo() { 
     return this.axlError; 
    } 
} 

응답 서버에서 반환 AXLError?

+1

이것은 @ WebFault를 매핑하는 CXF의 표준 방식입니다. WebFault를받는 WebService 메소드를 잡으려고 시도하면,'AXLError' 예외가 발생합니다.이 예외는'com.cisco.axl.api._11.AXLError getFaultInfo()'에 오류의 세부 사항을 담고 있습니다. 문제가 무엇입니까? – pedrofb

+0

불행히도'AXLError' 대신'ServerSOAPFaultException'을 던집니다. –

+0

스택 추적을 게시 할 때 도움이 될 것입니다. – pedrofb

답변

1

이것은 CXF의 @WebFault을 매핑하는 표준 방법입니다. WebFault를받는 WebService 메서드를 시도하거나 catch하면 오류 정보가 포함 된 AXLError 예외가 발생합니다. com.cisco.axl.api._11.AXLError getFaultInfo().

스택 추적에서 호출되는 CXF 클래스가 표시되지 않습니다. 클라이언트가 JDK에 포함 된 JAX-WS의 내부 구현을 사용하고있는 것으로 보입니다. 아마도 런타임 종속성에 CXF jar 파일을 추가하는 것을 잊었을 것입니다. maven을 사용하는 경우 다음 스 니펫을 사용하여 클래스 경로에 추가 할 수 있습니다.

<properties> 
    <cxf.version>3.1.8</cxf.version> 
</properties> 

<dependencies> 
    <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-transports-http</artifactId> 
     <version>${cxf.version}</version> 
    </dependency> 
    <!-- Jetty is needed if you're are not using the CXFServlet --> 
    <dependency> 
     <groupId>org.apache.cxf</groupId> 
     <artifactId>cxf-rt-transports-http-jetty</artifactId> 
     <version>${cxf.version}</version> 
    </dependency> 
</dependencies>