2011-11-03 2 views
0

웹 서비스 클라이언트 간의 차이가 하나의 성공으로 인해 하나의 오류가 발생합니다. 웹 서비스가 있습니다. wsdl을 기반으로 tomcat에서 JAXWS 2.2를 사용하여 빌드합니다.
이 wsdl을 바탕으로 훌륭한 클라이언트를 만들었습니다.
외부 클라이언트로부터 웹 서비스를 받고 있는데 서버에서 오류가 발생했을 때 네트워크를 스니핑했는데 다른 점이 있다는 것을 알았습니다 하지만 외부 요청을 스니핑 한 것을 보면 대부분이 네임 스페이스에 얼마나 비판적인지 모르겠습니다. AXIS를 사용하여 클라이언트를 구축 한 것을 볼 수 있습니다. 지금웹 서비스 클라이언트 간의 차이가 하나의 오류 (AXIS) 성공 (JAXWS)

POST /console/ws/APIEndpoint HTTP/1.1 
Accept: text/xml, multipart/related 
Content-Type: text/xml; charset=utf-8 
SOAPAction: "http://foo.com/ServerApi/sendMessageRequest" 
User-Agent: JAX-WS RI 2.2.5-b01 
Host: 192.168.3.69:18112 
Connection: keep-alive 
Content-Length: 1221 

<?xml version='1.0' encoding='UTF-8'?> 
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> 
<S:Body> 
<ns3:sendMessage xmlns:ns2="http://www.foo.com" xmlns:ns3="http://www.foo.com/"> 
<NP_MESSAGE> 
<ns2:HEADER> 
<REQUEST_ID>NPAABBYYMMDDXXXXXZZZZ</REQUEST_ID> 
<PROCESS_TYPE>PORT</PROCESS_TYPE> 
<MSG_TYPE>Publish</MSG_TYPE> 
<TRX_NO>MI000004548992</TRX_NO> 
<VERSION_NO>1</VERSION_NO> 
<RETRY_NO>2</RETRY_NO> 
<RETRY_DATE>2011-11-03T11:48:23.769+02:00</RETRY_DATE> 
<FROM>MI</FROM> 
<TO>aa</TO> 
</ns2:HEADER> 
<BODY> 
</BODY> 
</NP_MESSAGE> 
</ns3:sendMessage> 
</S:Body> 
</S:Envelope> 

를 실행 한 다음, 바람둥이 예외 메신저에 대한
내가이 서비스에 도달하지만, 여기 스텁 방법 중 하나에 실패 서버 측의 기록에 의하면 알고, 점점 작동 내 고객 서비스

03/11/2011 12:33:43 com.sun.xml.ws.server.sei.EndpointMethodHandler invoke 
SEVERE: null 
java.lang.NullPointerException 
     at com.foo.gw.ServiceApi.sendMessage(Unknown Source) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at com.sun.xml.ws.api.server.InstanceResolver$1.invoke(InstanceResolver.java:250) 
     at com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:150) 
     at com.sun.xml.ws.server.sei.EndpointMethodHandler.invoke(EndpointMethodHandler.java:261) 
:

POST /console/ws/APIEndpoint HTTP/1.1 
Host: 46.31.96.42:18112 
Content-Type: text/xml; charset=utf-8 
Accept: application/soap+xml, application/dime, multipart/related, text/* 
User-Agent: Axis/1.4 
Cache-Control: no-cache 
Pragma: no-cache 
SOAPAction: "http://foo.com/sendMessage" 
Content-Length: 1197 

Max-Forwards: 10 
<?xml version="1.0" encoding="UTF-8"?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<soapenv:Body> 
<sendMessage xmlns="http://foo.com/"> 
<NP_MESSAGE> 
<ns1:HEADER xmlns:ns1="http://foo.com"> 
<REQUEST_ID xmlns="">NPMICL111103350390001 
</REQUEST_ID> 
<PROCESS_TYPE xmlns="">PORT</PROCESS_TYPE> 
<MSG_TYPE xmlns="">Publish</MSG_TYPE> 
<TRX_NO xmlns="">MI000004554248</TRX_NO> 
<VERSION_NO xmlns="">1</VERSION_NO> 
<RETRY_NO xmlns="">2</RETRY_NO> 
<RETRY_DATE xmlns="">2011-11-03T13:00:06.659+02:00</RETRY_DATE> 
<FROM xmlns="">MI</FROM> 
<TO xmlns="">TZ</TO> 
</ns1:HEADER> 
<BODY xmlns=""> 
</BODY> 
</NP_MESSAGE> 
</sendMessage> 
</soapenv:Body> 
</soapenv:Envelope> 

톰캣에서 점점 예외 메신저는 다음과 같습니다 :이 작동하지 않는 외부 클라이언트의 요청입니다 17,451,515,

와 바람둥이 반환 : HTTP/1.1 500 Internal Server Error

내가하지 것은 그 이유를 수행 헤더에 일부 매개 변수가 그들 사이에 있지만, 몇 가지 정보를 읽은 후 누락 된 것을 알 수 있습니다. 요청이 바람둥이의 서비스에

UPDATE받을 수 있나요 beacose :

: 난 것은 메신저 예외를 받고 그 다음에
는, 내가 디버깅 할 수없는 경우에만 분산 로그를 내 서비스 클래스의 모습을 어떻게 여기 입니다 업데이트 2 :
내가 NP_MESSAGE가 null 인 것을 알고 있지만 내가 볼 수있는 이유는 클라이언트

@WebService (targetNamespace="http://www.foo.com/") 
public class Api { 
    Api() 
    { 

    } 
    @WebResult(name="return_NP_ACK", partName="return_NP_ACK") 
    @WebMethod(operationName = "sendMessage") 
    public NPACK sendMessage(@WebParam(name = "NP_MESSAGE")NPMESSAGE NP_MESSAGE) 
    { 
    if(null != NP_MESSAGE) 
{ 
    Logger.WriteLog("WebService NP_MESSAGE not null ",Level.DEBUG); 


} 
else 
{ 
    // I know that NP_MESSAGE is null im getting here !!! 
    Logger.WriteLog("WebService NP_MESSAGE is null ",Level.DEBUG); 
} 
    HEADER hHeader = NP_MESSAGE.getHEADER(); <-- here is where the exception 
    .... 
    ... 
    } 
} 

UPDATE 3에서 온다 때 데이터를 얻을 : 아니, 난 임하지만, 무언가를 발견
내 경우에는 확실하지 않습니다. 그리고 만약 그렇다면. 어떻게 해결할 수 있을까요? 이것은 AX-RPC versus JAX-WS에 대한 이야기입니다. 이것이 내 사건이라면 나는 완전한 지식을 가지고 있지 않다. 모든 WS 프레임 워크는 WSDL에서 항상 CORBA와 같은 계약처럼 어떤 일을하지 않았던 스텁을 생성한다고 생각하지 않습니다. 절대 내 .. 결코 ..
어떻게 고칠 수 있습니까? 나는 AXIS로 작업 할 수있는 옵션이 없습니다. 축 프로토콜과 함께 작동하도록 JAXWS에 지시 할 수는 없습니까?

+0

당신은 NPE가 던져지는 라인을보기 위해 디버그를 할 수 없습니까?어떤 변수가 null인지 그리고 왜 – javagirl

+0

이 내 질문을 업데이트했는지 확인하십시오. – user63898

+0

SOAP UI 도구를 사용하여 서비스 요청을 테스트 할 수있는 다른 독립 클라이언트를 사용하는 방법에 대한 조언을 드릴 수 있습니다. 잘못 구성했거나 AXIS 클라이언트가 잘못된 방법으로 호출했습니다 – javagirl

답변

1

내가 문제가 축 메시지에 여기 생각 :

<sendMessage xmlns="http://foo.com/"> 
<NP_MESSAGE> 

의 xmlns 정의가 기본 네임 스페이스를 정의하기 때문에는 NP_MESSAGE 요소는 이제 그 네임 스페이스에 정의되어 있습니다. 그러나 jaxws 메시지에는 기본 네임 스페이스가 없으므로 NP_MESSAGE 요소의 이름은입니다.

모든 요소 (WebParam, WebResult)를 WebService와 동일한 targetNamespace에 넣으십시오.

+0

각 주석에 targetNamespace = "http://foo.com/"을 추가하기 만하면됩니까? – user63898

+1

예, 그것이 제가 의미했던 것입니다. – jtahlborn

+0

응답 주셔서 감사하지만 지금은 WebMethod 주석에 targetNamespace 네임 스페이스 매개 변수가 없다는 것을 알 수 있습니다 ... – user63898

관련 문제