当我生成 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的单次出现