【问题标题】:SAAJ compatibility with JAXBSAAJ 与 JAXB 的兼容性
【发布时间】:2010-10-01 12:23:53
【问题描述】:

我一直致力于创建基于 SAAJ 的客户端。一切似乎都运行良好,直到我实现了将附件作为 Web 服务请求的一部分发送的逻辑。

Web 服务操作很简单 - 它需要一个字符串元素用于文件位置,以及一个 base64binary 元素用于文件内容。

我已经使用 SoapUI 测试了 ws 操作,一切似乎都井井有条。但是,当我从基于 SAAJ 的客户端发送文件附件时,Web 服务操作将只接收文件位置元素的值。我在 ws-server 上写了一个处理程序来拦截 WS 操作请求,以便查看附件是否到达 web-service。正如预期的那样,附件很好,我可以使用处理程序中的 SAAJ api 访问其内容。

这让我想知道 - 使用 SAAJ 发送附件并通过 JAXB 绑定接收附件时是否存在兼容性问题?有什么我遗漏的吗?

感谢您的帮助!

【问题讨论】:

    标签: java web-services jaxb jax-ws


    【解决方案1】:

    您需要确保在您的 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[]
                ...
            }
    
        }
    
    }
    

    【讨论】:

    • 如何确保这一点?另外,如果没有注册 AttachmentUnmarshaller,那么通过 SoapUI 发送的附件是如何正确解析的呢?
    • 您的服务是使用生成客户端还是手写客户端?
    • 客户端是手写的,基于SAAJ。由于客户端需要与许多 Web 服务进行交互,因此我们不能简单地生成特定于任何特定 WSDL 的绑定。
    • 您确定当通过 SoapUI 发送消息时附件没有被内联?
    • 是的 - 我启用了 MTOM,还检查了它发送的 RAW XML。附件与 SOAP 主体分开,并使用“cid:xxxxxxx”标识符链接。另外,感谢您在上面描述的方法。但是,这在我的情况下不起作用,因为我不能强加/坚持 Web 服务开发人员进行任何实现更改。
    猜你喜欢
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 2013-01-22
    • 2020-05-26
    相关资源
    最近更新 更多