Java 使用metro库在服务器端的SOAP中设置自定义响应头

Java 使用metro库在服务器端的SOAP中设置自定义响应头,java,web-services,soap,java-metro-framework,Java,Web Services,Soap,Java Metro Framework,我已经使用metro 2.3库从WSDL创建了服务器端端点java代码。在WSDL中,标头中有一些自定义属性。但在生成的代码中,该方法只允许设置响应主体。为了在标头中设置自定义属性,我根据WebMethod中的WSDL为SOAP标头响应添加了一个额外的参数,使用这个标记:@WebParam(mode=OUT,header=true)。 根据Metro的文件,这应该是可行的。但它给出了以下错误 @WebParam(name = "DataInput", targetNamespace = "urn

我已经使用metro 2.3库从WSDL创建了服务器端端点java代码。在WSDL中,标头中有一些自定义属性。但在生成的代码中,该方法只允许设置响应主体。为了在标头中设置自定义属性,我根据WebMethod中的WSDL为SOAP标头响应添加了一个额外的参数,使用这个标记:@WebParam(mode=OUT,header=true)。 根据Metro的文件,这应该是可行的。但它给出了以下错误

@WebParam(name = "DataInput", targetNamespace = "urn://mycompany.com/Common/Service/CommonGenericReplyRS/ReplyTo/1.0/DataIO", partName = "input")
            DataInput input,
            @WebParam(name = "HeaderRequest", targetNamespace = "urn://mycompany.com/Schemas/SOAMessages/SoapHeader", header = true)
            HeaderRequest headerRequest 
            , @WebParam(header=true, mode=Mode.INOUT, name = "HeaderReply", partName = "output",  **targetNamespace = "urn://mycompany.com/Schemas/SOAMessages/SoapHeader") HeaderReply headerReply**);
在方法签名中添加HeaderReply HeaderReply后,我遇到以下错误

Throwable occurred: java.lang.IllegalArgumentException: **argument type mismatch**
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
    at java.lang.reflect.Method.invoke(Method.java:611)
    at com.sun.xml.ws.api.server.InstanceResolver$1.invoke(InstanceResolver.java:250)
    at com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:149)
    at com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:88)
    at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:1136)
    at com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:420)
    at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:687)

有谁能告诉我在服务器端响应中设置自定义SOAP头的方法吗?

将参数类型从HeaderReply更改为
Holder
后,它就起作用了

public DataOutput replyTo(
        @WebParam(name = "DataInput", targetNamespace = "urn://mycompany.com/Common/Service/CommonGenericReplyRS/ReplyTo/1.0/DataIO", partName = "input")
        DataInput input,
        @WebParam(name = "HeaderRequest", targetNamespace = "urn://mycompany.com//Schemas/SOAMessages/SoapHeader", header = true, partName = "HeaderRequest")
        HeaderRequest headerRequest,
        @WebParam(name = "HeaderReply", targetNamespace = "urn://mycompany.com/Schemas/SOAMessages/SoapHeader", header = true, mode = WebParam.Mode.OUT, partName = "HeaderReply")
        Holder<HeaderReply> headerReply)
public DataOutput replyTo(
@WebParam(name=“DataInput”,targetNamespace=”urn://mycompany.com/Common/Service/CommonGenericReplyRS/ReplyTo/1.0/DataIO,partName=“输入”)
数据输入,
@WebParam(name=“HeaderRequest”,targetNamespace=”urn://mycompany.com//Schemas/SOAMessages/SoapHeader,header=true,partName=“HeaderRequest”)
HeaderRequest HeaderRequest,
@WebParam(name=“HeaderReply”,targetNamespace=”urn://mycompany.com/Schemas/SOAMessages/SoapHeader,header=true,mode=WebParam.mode.OUT,partName=“HeaderReply”)
保持架(头朝上)

它是SOAP头还是Http头?