Я написал веб-сервис SOAP, и он отлично работает, когда я развертываю его, используя Apache Tomcat-8 через мое затмение. Но когда я пытаюсь развернуть то же самое на aixs2, используя файл .aar, сгенерированный wsdl не корректен (или не так, как я хочу).
Похоже, что Axis2 не может прочитать @ WebResult аннотация.
Ожидаю вывод в виде
<ISWSLoginResult xmlns="http://www.test.com/"><![CDATA[<Session Action="Login" SessionKey="">
<RetStatus>0</RetStatus>
<ErrorString/>
<ISResponse>
<SessionKey>4e766d31-170f-4a0e-85fb-86934ad8b552</SessionKey>
</ISResponse>
</Session>]]></ISWSLoginResult>
Но я получаю это как вывод:
<ns:return><![CDATA[<Session Action="Login" SessionKey="2f46dff7-fd60-4bcd-943f-8f49f801c734">
<RetStatus>0</RetStatus>
<ErrorString/>
<ISResponse>
<SessionKey>2f46dff7-fd60-4bcd-943f-8f49f801c734</SessionKey>
</ISResponse>
</Session>]]></ns:return>
Я искал об этом и обнаружил, что это происходит, когда вы не предоставляете аннотацию @WebResult в своем коде, но я предоставил то же самое, и кажется, что axis2 каким-то образом не в состоянии его прочитать.
@WebMethod(action = "http://www.test.com/ISWSLogin", operationName = "ISWSLogin")
@WebResult(name = "ISWSLoginResult", targetNamespace = "http://www.test.com/")
public java.lang.String ISWSLogin(@WebParam(name = "username") java.lang.String username, @WebParam(name = "password") java.lang.String password)
{
System.out.println("Inside Webservice function iswsLogin");
ResponseXml xmlResp = new ResponseXml( "", "Login" );
String session = java.util.UUID.randomUUID().toString();
WASyncHandler handler = new WASyncHandler( session );
try
{
if( !handler.ISLogin( username, password ) )
throw new Exception( "Unknown error" );
Element key = xmlResp.getXmlDoc().createElement("SessionKey");
key.setTextContent(session);
xmlResp.getISResponse().appendChild(key);
}
catch( Exception ex )
{
xmlResp.setRetStatus(-1);
xmlResp.setErrorString( ex.getMessage() );
}
return xmlResp.getXml();
}