无法从JAXBElement <byte []> </byte []>读取数据

时间:2015-03-31 17:10:21

标签: java xml jaxb

我正从我们的供应商处访问其中一个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()似乎不起作用:(

非常感谢任何帮助。

感谢。

1 个答案:

答案 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;
    }

}