当我生成 stub (使用Eclipse Oxygen,自上而下,Axis1)时,将生成如下函数:

public TokenNamespace.ideas.mace.TokenResponse getToken(TokenNamespace.ideas.mace.TokenRequest tokenRequest) throws java.rmi.RemoteException {
    return null;
}

public TokenNamespace.ideas.mace.TokenResponse getToken2(TokenNamespace.ideas.mace.TokenRequest tokenRequest, boolean stopOnAnyError, TokenNamespace.ideas.mace.EACommand[] command, TokenNamespace.ideas.mace.HttpHeader[] httpHeader) throws java.rmi.RemoteException {
    return null;
}
为什么在拆解BatchCommand和HttpHeaders的同时保持TokenRequest类不变?
我尝试在HttpHeaders和BatchCommand下添加更多子元素,但是它们只是作为附加参数而被拆分。我无法发现它们的声明和getToken的区别。

最佳答案

如果您正在谈论getToken2()方法,那么实际上它们并没有被拆除,而是如果您看到httpheaders实际上是httpheader数组,因此在Java代码中,它会转换为httpheaders数组作为getToken2的参数,并且CommandBatch也是这种情况。



如果您正在谈论为什么要从getToken()方法中拆除它们,那么解决方案如下。

这是因为在wsdl文件中,您尚未定义getToken()方法的参数

例如你有这个

<portType name="TokenService">
        <operation name="getToken" parameterOrder="getToken">
            <input message="tns:TokenService_getToken" />
            <output message="tns:TokenService_getTokenResponse" />
        </operation>
        <operation name="getToken2" parameterOrder="getToken batchCommand httpHeaders">
            <input message="tns:TokenService_getToken2" />
            <output message="tns:TokenService_getTokenResponse" />
        </operation>
    </portType>

您应该像下面这样更新
<portType name="TokenService">
        <operation name="getToken" parameterOrder="getToken batchCommand httpHeaders">
            <input message="tns:TokenService_getToken" />
            <output message="tns:TokenService_getTokenResponse" />
        </operation>
        <operation name="getToken2" parameterOrder="getToken batchCommand httpHeaders">
            <input message="tns:TokenService_getToken2" />
            <output message="tns:TokenService_getTokenResponse" />
        </operation>
    </portType>

那就是您的操作getToken应该在parameterOrder属性中定义所需的参数。

并从以下位置更改消息
<message name="TokenService_getToken">
        <part element="tns:httpHeaders" name="httpHeaders" />
    </message>


<message name="TokenService_getToken">
        <part element="tns:getToken" name="getToken" />
        <part element="tns:batchCommand" name="batchCommand" />
        <part element="tns:httpHeaders" name="httpHeaders" />
    </message>

之后,它会正确生成代码。

您可以进一步看一下answer,它说明了如何使用maxOccurs属性。如果未指定,则元素将仅出现一次。因此,这就是为什么getToken不会像其他参数一样被更改为数组,而是被TokenRequest的一次出现所代替,而TokenRequest实际上就是getToken complexType中包含的内容。那是TokenRequest的单次出现

10-06 01:29