2013-10-16 1 views
1

CXF 2.6.2를 사용하여 외부 시스템에서 웹 서비스에 액세스하고 있습니다. 스텁은 WSDL 파일에서 생성됩니다. 웹 서비스가 제대로 응답 할 때 제대로 작동하지만 오류가 발생하지는 않습니다. org.w3c.dom.DOMException가 :에 의해 발생CXF에서 외부 시스템의 SOAP 오류를 처리하는 방법은 무엇입니까?

가 [ExceptionDetail : 널] org.jboss.ws에서의 동작은 노드 유형이 지원되지

그러면 I는 다음의 예외를 얻는다. (org.apache.cxf.jaxws.JaxWsClientProxy.createSoapFault (NodeImpl.java:459) )에서JaxWsClientProxy.java:234) at org.apache.cxf.jaxws.JaxWsClientProxy.invoke (JaxWsClientProxy.java:152)

나는 웹 서비스에서 얻을 6,

실제 응답은 다음과 같습니다

ID: 6 
Response-Code: 500 
Encoding: UTF-8 
Content-Type: text/xml; charset=utf-8 
Headers: {Content-Length=[1925], content-type=[text/xml; charset=utf-8], Date=[Wed, 16 Oct 2013 05:40:21 GMT], Persistent-Auth=[true], Server=[Microsoft-IIS/7.5], X-Powered-By=[ASP.NET]} 
Payload: 
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
<s:Body><s:Fault> 
<faultcode xmlns:a="http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher">a:InternalServiceFault</faultcode> 
<faultstring xml:lang="en-US">External Exception Message</faultstring> 
<detail><ExceptionDetail xmlns="http://schemas.datacontract.org/2004/07/System.ServiceModel" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><HelpLink i:nil="true"/><InnerException i:nil="true"/><Message>External Exception Message</Message><StackTrace>...stacktrace from external system...</StackTrace><Type>XXXException</Type></ExceptionDetail></detail> 
</s:Fault></s:Body> 
</s:Envelope> 

그래서 제 질문은 내가 CXF 제대로 soapfaults을 처리 할 수있는 방법인가? 내가 필요한 것은 오류의 원인을 응답에서 제거하는 것입니다.

물론 반환 된 메시지를 구문 분석 할 수는 있지만 매우 귀찮은 작업입니다.

반환 된 soapmessage를 가져 오는 자체 인터셉터 (AbstractSoapInerceptor 확장)를 이미 등록했지만 메시지에 응답이있는 inputstream 만 포함되어 있으며 XML 내부를 인식하지 못하는 것 같습니다.

감사

답변

1

문제 해결. 좀 더 자세한 디버깅을 한 후에는 CXF 구현을 사용하는 JBoss 4.2.3에서 실제로 문제가 발생한다는 것을 알았습니다.

JBoss WS가이 프로세스에 개입했기 때문에 오류 메시지의 세부 태그를 전달할 수 없었습니다. 다음 예외에서 세부 태그를 삭제 한 후 : org.jboss.ws.core.soap.SOAPFaultElementImpl에 대한 인스턴스화 예외. jbossws를 사용할 필요가 없다고 생각했기 때문에 실제로이 클래스는 클래스 패스에 없었습니다. 이제는 그것을 포함 시켰고 모든 것이 예상대로 작동합니다!

관련 문제