разница между клиентами веб-сервисов приводит к одной ошибке в одном успехе
У меня есть веб-сервис, который я создаю, используя JAXWS 2.2 на tomcat, на основе wsdl.
На основе этого wsdl я создал клиент, который прекрасно работает.
Но когда я получаю веб-сервисы от внешнего клиента, я получаю ошибки на сервере, я анализировал сеть, и я увидел, что есть различия
Но я не знаю, насколько критичны они в основном пространства имен, как я вижу из сниффина внешнего запроса, я вижу, что они использовали AXIS для сборки клиента.
Для исключения tomcat, которое я получаю, я знаю, что по журналам на стороне сервера он попадает в сервис, но не работает в одном из методов-заглушек.
Вот мой клиентский сервис, который работает:
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>
и теперь это запрос от внешнего клиента, который не работает:
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>
Исключение, которое я получаю от кота, выглядит так:
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)
и кот возвращается: HTTP/1.1 500 Internal Server Error
я заметил, что в шапке
некоторые параметры отсутствуют между ними, но после прочтения некоторой информации я не понимаю, в чем причина. передайте запрос на сервис в tomcat
UPDATE:
вот где я думаю, что я получаю исключение, я не могу отлаживать только логи разброса
Вот как выглядит мой класс обслуживания:
ОБНОВЛЕНИЕ 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
....
...
}
}
ОБНОВЛЕНИЕ 3:
Я нашел что-то, но я не уверен, что это мой случай. и если это. Как я могу это исправить .
это ссылка, в которой говорится о AX-RPC против JAX-WS . у меня нет полного знания, если это мой случай.
Не все фреймворки WS предполагают всегда создавать заглушки из wsdl, которые не могут говорить о том, что они сделали, например, контракт, как CORBA. никогда не мой ..
В любом случае, как это исправить, у меня нет возможности работать с ОСью. я не могу просто сказать JAXWS работать с протоколом оси?