簡體   English   中英

使用 AXIS1 自上而下的 Web 服務生成將我的 complexType 分開

[英]Top-down Web Service Generation using AXIS1 is taking my complexType apart

當我生成一個存根(使用 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;
}

為什么 TokenRequest 類保持完整,而 BatchCommand 和 HttpHeaders 被拆除?

我嘗試在 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>

之后它會正確生成代碼。

您可以進一步查看此答案它解釋了如何使用 maxOccurs 屬性。 如果未指定,則元素將僅出現一次。 所以這就是為什么 getToken 沒有像其他參數一樣被更改為數組,而是被替換為 TokenRequest 的一次出現,它確實包含在 getToken complexType 中。 那是 TokenRequest 的一次出現

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM