JAX-WS の return simple String[] に問題があります。@WebMethod があります。
public String[] getUserInfo() {
MessageContext mc = wsContext.getMessageContext();
HttpSession session = ((javax.servlet.http.HttpServletRequest) mc.get(MessageContext.SERVLET_REQUEST)).getSession();
String username = (String) session.getAttribute("username");
String[] userInfo = new String[4];
Session hibSess = HibernateUtil.getSessionFactory().openSession();
hibSess.beginTransaction();
String query = "select id, login, email, active from User as user where user.login ='Mrl'";
Query queryResult = hibSess.createQuery(query);
java.util.List user = queryResult.list();
int i;
int j;
Object object = null;
for (i = 0; i < user.size(); i++) {
Object[] obj = (Object[]) user.get(i);
for (j = 0; j < obj.length; j++) {
userInfo[j] = obj[j].toString();
}
}
/* Here is the moment when I check the array on server side - it's fine */
System.out.println("US:"+user.size() + ", userInfo length" +userInfo.length+"\n"+userInfo[0]
+"\n"+userInfo[1]+"\n"+userInfo[2]+"\n"+userInfo[3]);
return userInfo;
}
配列には 4 つの要素が必要です。サーバー上には 4 つの要素があり、正しいデータが含まれています。
クライアントでその配列を取得しようとすると、エラーは発生しません。空の 1 要素の配列を取得するだけです。
クライアントコードは次のとおりです。
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "getUserInfo")
public class GetUserInfo {
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "getUserInfoResponse", propOrder = {
"_return"
})
public class GetUserInfoResponse {
@XmlElement(name = "return")
protected String[] _return;
public String[] getReturn() {
return _return;
}
public void setReturn(String[] value) {
this._return = value;
}
}
そして、私が使用するクライアントを実行するために:
SimpleWebService proxy = new SimpleWebServiceService().getSimpleWebServicePort();
((BindingProvider)proxy).getRequestContext().put(BindingProvider.SESSION_MAINTAIN_PROPERTY,true);
proxy.connect();
String[] userArray = proxy.getUserInfo();
サーバー wsdl フラグメント:
<message name="getUserInfo"/>
<message name="getUserInfoResponse">
<part xmlns:ns2="http://jaxb.dev.java.net/array" name="return" type="ns2:stringArray"/>
</message>