我正从我们的供应商处访问其中一个Web服务,该服务采用pageID并以xml格式返回数据。
当我在浏览器上访问网页服务时,我在输入pageID后的xml格式如下所示
<EpsBinaryEx xmlns="http://Eprise">
<ErrorString>No Error</ErrorString>
<ErrorNum>1</ErrorNum>
<Data>ajhsdjasjajadjhgasd</Data>
</EpsBinaryEx>
感兴趣的是检索元素。这实际上是一个Base64字符串。我有一个EpsBinaryEx的方法,它以下面的形式返回数据
public JAXBElement<byte[]> getData() {
return data;
}
使用Java,我正在阅读下面的web服务
PSWebService service = new PSWebService();
PSWebServiceSoap soap = service.getPSWebServiceSoap();
EpsBinaryEx base64Data = soap.getUploadedDocument(token, pageId);
System.out.println(base64Data.getData.getValue());
而不是base64字符串,输出为[B @ 27e80064,它看起来像一些偏移地址。
您能告诉我如何阅读JABXElement元素吗? getData.getValue()似乎不起作用:(
非常感谢任何帮助。
感谢。
答案 0 :(得分:1)
getValue()
会返回byte[]
,因此您的打印数组ID不是内容。
用户Arrays.toString(base64Data.getData.getValue()))
或
new String(base64Data.getData.getValue()))
打印内容。
您也可以考虑您的设计。我会将数据映射为jaxb bean中的字符串,并添加方法getDataDecoded(),使用Base64解码将它们转换为byte [],因此不需要JAXBElement
@XmlRootElement
public class EpsBinaryEx {
@XmlElement(name="ErrorString")
String errorString;
@XmlElement(name="ErrorNum")
int errorNum;
@XmlElement(name="Data")
String encoded;
@XmlTransient
byte[] decoded;
void afterUnmarshal(Unmarshaller u, Object parent) {
decoded = Base64.decode(encoded);
}
boolean beforeMarshal(Marshaller m) {
encoded = Base64.encode(decoded);
return true;
}
public byte[] getData() {
return decoded;
}
public void setData(byte[] d) {
decoded = d;
}
}