Web services 使用@WebParam时出现CXF web服务问题(header=true)

Web services 使用@WebParam时出现CXF web服务问题(header=true),web-services,parameters,header,wsdl,cxf,Web Services,Parameters,Header,Wsdl,Cxf,我需要帮助。我的工作中有一个CXF web服务在WebLogic服务器中运行得非常好。我最近被要求传递一些额外的参数,以进行额外的身份验证。我们希望这些额外的参数在标题中移动,而不是作为正常参数 我有两种不同的情况要解释。事实上,在第1个场景中,一切都很好,我非常高兴,因为我的web服务收到了头参数,我可以验证它们。但是,在场景2中,在运行时,头中的所有这些新参数都是NULL,并且正常参数都正确填充了!。因此,我无法验证标题。我需要场景2来工作,因为我们希望这些额外的参数在标题中 为什么这个绑定

我需要帮助。我的工作中有一个CXF web服务在WebLogic服务器中运行得非常好。我最近被要求传递一些额外的参数,以进行额外的身份验证。我们希望这些额外的参数在标题中移动,而不是作为正常参数

我有两种不同的情况要解释。事实上,在第1个场景中,一切都很好,我非常高兴,因为我的web服务收到了头参数,我可以验证它们。但是,在场景2中,在运行时,头中的所有这些新参数都是NULL,并且正常参数都正确填充了!。因此,我无法验证标题。我需要场景2来工作,因为我们希望这些额外的参数在标题中

为什么这个绑定在我的第二个场景中不起作用?有虫子吗?我错过什么了吗?请帮帮我。在这里,我用一些代码来说明这两种情况:

这里一切正常。在我的cxf-servlet.xml文件中,我将端点定义为:

    <jaxws:endpoint id="omniWebService"
                implementor="server.com.omnipay.webservice.webService.ServiceImpl"
                address="/omniWS" />
就这些。我不认为我需要表现得更多。这很好用。我在WebLogic和我的客户机或soapUI或调试中进行部署,或者无论我做什么,web服务都会接收所有这些参数,我可以使用它们

2我想在我的cxf-servlet.xml中使用的真正端点如下所示:

    <jaxws:endpoint id="omniWebService"
                implementor="server.com.omnipay.webservice.webService.ServiceImpl"
                address="/omniWS" wsdlLocation="WEB-INF/omniWebService.wsdl">
    <jaxws:properties>
        <entry key="schema-validation-enabled" value="true" />
    </jaxws:properties>
</jaxws:endpoint>
使用这个的原因是因为我需要一个本地WSDL,我可以编辑和修改它。这个本地WSDL就是WebLogic在我第一次部署之后提供给我的WSDL,加上添加了这样的东西,再加上使用它们而不是type=xs:string:

            <!-- Institution Number is a required 8 numeric positions IN parameter -->
        <xs:simpleType name="institutionNumber">
            <xs:restriction base="xs:string">
                <xs:length value="8"/>
                <xs:pattern value="[0-9]+"/>
            </xs:restriction>
        </xs:simpleType>
这就是,添加一些限制,以便WSDL验证用户输入。例如,00000123是一个有效的机构编号,但000000XX不是

这个功能非常好用。老实说,它迫使我维护一个本地WSDL文件,我不希望这样做,但我没有找到任何其他方法

这就是我的问题所在。即使我将WebLogic在部署原始WSDL后提供给我的自动WSDL的确切内容作为本地WSDL,而不做任何更改!,结果是,在执行时,我的正常参数institution number、client number等被正确填充,但我的3个头参数callerId、timestamps和signature为空

有什么建议吗?我做错了什么?这两种功能在不一起工作时都能很好地工作,但当我把它们放在一起时,我在执行中遇到了这个问题。为什么绑定在场景1中工作正常,但在场景2中却不正常


谢谢,我找到问题了。嗯,我试过一些疯狂的东西,它奏效了。我把3个标题参数放在最后,然后它就工作了!我觉得这很奇怪。为什么我不能把它们放在开头?这可能是一个WebLogic问题吗?我是否在使用带有bug的旧CXF类?很奇怪,但很高兴它现在已经修好了

    @WebResult (name="merchantHierarchyParentResponse") MerchantHierarchyParentResponseDTO
getParent(
        @WebParam(name="institutionNumber") @XmlElement(required=true) String institutionNumber,
        @WebParam(name="clientNumber") String clientNumber,
        @WebParam(name="ourReference") String ourReference,
        @WebParam(name="accessMerch") String accessMerch,
        @WebParam(header=true, name="callerId") String callerId,
        @WebParam(header=true, name="timestamp") String timestamp,
        @WebParam(header=true, name="signature") String signature
);
    @WebResult (name="merchantHierarchyParentResponse") MerchantHierarchyParentResponseDTO
getParent(
        @WebParam(name="institutionNumber") @XmlElement(required=true) String institutionNumber,
        @WebParam(name="clientNumber") String clientNumber,
        @WebParam(name="ourReference") String ourReference,
        @WebParam(name="accessMerch") String accessMerch,
        @WebParam(header=true, name="callerId") String callerId,
        @WebParam(header=true, name="timestamp") String timestamp,
        @WebParam(header=true, name="signature") String signature
);