我正在开发一个Android应用程序,它假设调用Axis2 Web Service(已经实现并运行),以前的开发人员以Byte []是传递Object的常用形式。假设需要在Axis2中调用应该返回List的Web服务,Web服务会将该实例转换为Byte []并返回Byte [],客户端会将其转换回来。Axis2 ByteArray Web服务返回字符串
这里是从服务的片段:
public byte[] getMyPersonList() throws Exception {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
java.io.ObjectOutputStream oos = new java.io.ObjectOutputStream(baos);
oos.writeObject(new List<Person>());
return (baos.toByteArray());
}
在客户端(不是我的Android应用程序,但是这是由同一人创建Web服务开发已有的桌面应用程序)
byte[] buffer = (byte[]) serviceClient.invokeBlocking(methodName,
new Object[] {}, new Class[] { byte[].class })[0];
java.io.ObjectInputStream ois = new java.io.ObjectInputStream(
new java.io.ByteArrayInputStream(buffer));
return (List<Person>) ois.readObject();
invokeBlocking()方法似乎自动将返回的值从服务自动转换回byte [],但我在我的应用程序中做同样的事情时遇到问题。
这是返回值看起来就像当我手动调用该服务在浏览器:
<return> rO0ABXNyABNqYXZhLnV0aWwuQXJyYXlMaXN0eIHSHZnHYZ0DAAFJAARzaXpleHAAAAAJdwQAAAAKc3IAJ3dvcmtmbG9....................... </return>
什么到目前为止,我所做的是直接得到回报的字符串和使用的getBytes() :
byte [] soapReturnBytes = resultsRequestSOAP.getPropertyAsString("return").getBytes();
ObjectInputStream ois = new ObjectInputStream(bais);
myPersonList= (List<Person>) ois.readObject();
但是,我收到了流损坏的错误,这可能意味着,当我将其转换回来时,它并不是相同的内容。
所以我的问题是:
- 当返回字节[],这是什么Axis2引擎做的值转换,以适应它到SOAP返回
- 什么是转换这个“字符串化”的方法值返回字节[],以防万一我无法做任何有关Web服务(无需修改Web服务)
任何建议,非常感谢。
编辑:
至于建议,我使用的解码器得到的结果,但仍然没有运气:
String result = resultsRequestSOAP.getPropertyAsString("return");
byte[] soapReturnBytes = Base64.decode(result, Base64.DEFAULT);
ByteArrayInputStream bais = new ByteArrayInputStream(soapReturnBytes);
ObjectInputStream ois = new ObjectInputStream(bais);
orgs = (List<Person>) ois.readObject();
我还收到了同样的错误:
java.io.StreamCorruptedException: Wrong format: 0
任何建议? 感到沮丧
编辑2:
我创建了返回的字符串作为字节[]其他服务,并在我的Android应用程序,我收到的byte [],并将其转换回原始字符串。所以也许它与我使用流转换我的对象< => byte []的方式有关。
您可以复制返回的字符串Axis2服务并将其粘贴到解码器中以查看会发生什么情况?两种服务都不会返回适当的值,或者客户端不会正确读取该字符串。 –
编辑我的问题 – JofryHS
还有一件事不清楚 - 你可以添加'System.out.println(resultsRequestSOAP.getPropertyAsString(“return”));'并将输出与Web服务响应的内容进行比较?如果匹配,那么问题可能在(de)序列化过程中。 –