我一直在创建基于SAAJ的客户端。一切似乎都运行良好,直到我实现了将附件作为Web服务请求的一部分发送的逻辑。
Web服务操作很简单-它需要一个用于文件位置的字符串元素,以及一个用于文件内容的base64binary元素。
我已经使用SoapUI测试了ws操作,并且一切似乎都井然有序。但是,当我从基于SAAJ的客户端发送文件附件时,Web服务操作将仅接收文件位置元素的值。我在ws-server上编写了一个处理程序,以拦截WS操作请求,以查看附件是否甚至到达了Web服务。正如预期的那样,附件可以正常使用,并且我可以使用处理程序中的SAAJ api访问其内容。
这只是让我想知道-使用SAAJ发送附件并通过JAXB绑定接收附件时是否存在兼容性问题?有什么我想念的吗?
谢谢你的帮助!
最佳答案
您需要确保在Unmarshaller上注册了AttachmentUnmarshaller才能接收JAXB中的附件。
import javax.activation.DataHandler;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.attachment.AttachmentUnmarshaller;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jaxbContext = JAXBContext.newInstance(Demo.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
unmarshaller.setAttachmentUnmarshaller(new MyAttachmentUnmarshaller());
}
private static class MyAttachmentUnmarshaller extends AttachmentUnmarshaller {
@Override
public DataHandler getAttachmentAsDataHandler(String cid) {
// TODO - Lookup MIME content by content-id, cid, and return as a DataHandler.
...
}
@Override
public byte[] getAttachmentAsByteArray(String cid) {
// TODO - Retrieve the attachment identified by content-id, cid, as a byte[]
...
}
}
}