【问题标题】:Using @WebParam(header = true) in CXF web service在 CXF 网络服务中使用 @WebParam(header = true)
【发布时间】:2013-05-01 08:15:51
【问题描述】:

我正在尝试编写一个 Web 服务,它只有一个按摩参数,其余的是标题参数。 我的网络服务如下所示:

    @BindingType(SOAPBinding.SOAP11HTTP_MTOM_BINDING)
    @MTOM
    @WebService(targetNamespace = WS_NAMESPACE + "/FileSvc")
    @Service
    public interface FileSvc
    {
        void uploadFile(@WebParam(name = "dataHandler") @XmlMimeType("application/octet-stream")DataHandler dataHandler,
                    @WebParam(header = true, name = "fileName") String fileName,
                    @WebParam(header = true, name = "fileSize") long fileSize);
    } 

服务工厂定义如下:

    <bean id="fileSvcProxyFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
            <property name="serviceClass" value="com....FileSvc"/>
            <property name="address" value="http://.../FileSvc"/>
            <property name="bus" ref="client_bus"/>
            <property name="dataBinding" ref="globalJAXBDataBinding" />
    </bean> 

当我尝试从 java 客户端测试此服务时,我在尝试加载服务时收到此错误:

原因: org.apache.cxf.service.factory.ServiceConstructionException:消息 部分 {http://.../FileSvc} 消息文件名 {http://.../FileSvc}uploadFile 无法处理。这可以是 由在没有 JAX-WS 服务的情况下使用特定于 JAX-WS 的类型引起的 工厂豆。

谁能向我解释一下这个 webParam 是如何工作的?

谢谢,

【问题讨论】:

    标签: java web-services cxf


    【解决方案1】:

    尝试删除 globalJAXBDataBinding 并查看是否有帮助。或者,将@RequestWrapper 和@ResponseWrapper 注释添加到接口方法以指向适当的包装器类型。不是 100% 肯定会奏效,但值得一试。

    如果它仍然不起作用,将不胜感激一个小的完整测试用例。

    【讨论】:

    • 我删除了 globalJAXBDataBinding(它是我们为 CXFs JAXBDataBinding 编写的包装器),看起来它可以工作。谢谢
    • 你能解释一下为什么这应该有效吗?我真的需要使用 globalJAXBDataBinding,因为我们有更多的 5,000 个类和大约 20 个 Web 服务。所以我们必须使用全局绑定。我看不出使用包装器有什么帮助(我必须只为 DataHandler 使用整个按摩体,否则 C# 客户端不能使用该服务),它没有任何区别。我是否有更多选择,或者它会帮助您了解全貌?
    猜你喜欢
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    相关资源
    最近更新 更多