gpt4 book ai didi

java - 我无法使用 JAX-WS 返回数组 String[]

转载 作者:行者123 更新时间:2023-11-30 09:28:21 24 4
gpt4 key购买 nike

我在 JAX-WS 中返回简单的 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;
}

数组应该有四个元素。在服务器上它有四个元素,它们包含正确的数据。

当我尝试在我的客户端上获取该数组时,我没有收到任何错误。我只是得到一个空的单元素数组。

这是客户端代码:

@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>

最佳答案

您可以使用 List 而不是数组,这是 jax-ws 中的默认设置。

但是如果你真的坚持使用那种数组类型,你可以使用自定义的 XmlAdapter,它可以在 jax-ws 可以理解的类型和自定义的新类型之间进行调整。

你需要注释:

@XmlElement(name = "return")
@XmlJavaTypeAdapter(StringArrayXmlAdapter.class)
protected String[] _return;

StringArrayXmlAdapter:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.xml.bind.annotation.adapters.XmlAdapter;

public class StringArrayXmlTypeAdapter extends
XmlAdapter<List<String>, String[]> {
@Override
public List<String> marshal(String[] arg) throws Exception {
return new ArrayList<String>(Arrays.asList(arg));
}

@Override
public String[] unmarshal(List<String> arg) throws Exception {
return arg.toArray(new String[] {});
}
}

我没有用数组尝试过,所以我不能保证它是这样工作的。

关于java - 我无法使用 JAX-WS 返回数组 String[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14082509/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com