在CXF Web服务中使用@WebParam(header = true)

时间:2013-05-01 08:15:51

标签: java web-services cxf

我正在尝试编写一个只有一个按摩参数的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} Message的fileName   无法处理{http://.../FileSvc} uploadFile。这可以   由于在没有JAX-WS服务的情况下使用特定于JAX-WS的类型而导致的   工厂豆。

有人可以向我解释这个webParam的工作原理吗?

谢谢,

1 个答案:

答案 0 :(得分:0)

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

如果它仍然不起作用,我们将不胜感激。