簡體   English   中英

從使用列表的.Net調用Java Web Service <T>

[英]Calling Java Web Service from .Net that uses List<T>

我正在開發Java Web服務,該服務將由.Net客戶端使用。 該服務公開了一個接受對象作為參數的方法,該對象具有類型為List的字段,Row類也具有類型為List的字段。

現在,當Java客戶端使用此服務時,它正確地將類型視為List,但是當.Net客戶端使用該服務時,我最終以期待用Value類型的數組(例如Value [] [])而不是List的調用結束。

版本兼容性已設置為“ .Net 3.5 / METRO 1.3”。

有誰知道我如何使它與.Net和Java客戶端相同,因為它們接受List而不是Value [] []?

Web服務的簡化版本為:

服務:

    @WebService(serviceName = "Test")
    public class Test {

    @WebMethod(operationName = "DataRequest")
    public DataResponse DataRequest(DataRequest req) {
        return new DataResponse();
    } 

}

數據請求:

public class DataRequest {
    public DataType datType;
    public String source;
    public List<RowInfo> rows;
    public String loginId;
}

行信息:

public class RowInfo {
   public List<Value> valueList;
}

值:

public class Value {    
    public String name;
    public String value;
}

在我的.Net客戶端上,當我嘗試構建請求對象時,它將FeeDataRequest的行字段視為Value [] []而不是List。

已配置.Net中的服務引用,以使收集類型為System.Collections.Generic.List。

關於如何制作.Net的任何想法都能正確地看到這一點嗎?

使用jsonxml在服務之間發送數據。

您可以發布Web服務的WSDL嗎?

默認情況下,在生成WSDL時,List對象將轉換為數組。 .NET試圖從WSDL中構建對象類型。

另外,如果您的RowInfo類僅具有Value對象的集合,則在DataRequest中使用Value對象的集合而不是RowInfo對象的集合並不容易

d所需要做的就是在需要List的任何地方使用數組。 您不必擔心其他任何事情

我建議先做WSDL,然后從那里創建客戶端和接口。 然后將其映射到服務實現上需要處理的對象。

您的架構將類似於

<complexType name="DataRequest">
    <all>
        <element name="datType" type="DataType" />
        <element name="source" type="string" />
        <element name="rows">
            <complexType>
                <sequence>
                    <element name="row" type="RowInfo" minOccurs="0" maxOccurs="unbounded" />
                </sequence>
            </complexType>
        </element>
        <element name="loginId" type="string" />
    </all>
</complexType>

隨后是RowInfo,使用與行相同的模式。 即minOccurs =“ 0”和maxOccurs =“ unbounded”。 這將使客戶端生成器創建一個列表。

<complexType name="RowInfo">
   <sequence>
       <element name="valueList" type="Value" minOccurs="0" maxOccurs="unbounded" />
   </sequence>
<complexType>

您具有的最后一種類型是“值”。

<complexType name="Value">
    <all>
         <element name="name" type="string" />
         <element name="value" type="string" />
    </all>
</complexType>

最后,您需要一個包含元素。

<element name="dataRequest" type="DataRequest" />

當然,以上只是措辭,您仍然需要在名稱空間中加上諸如此類。

新的Web服務開發人員(包括我自己)的問題之一是,我們認為僅對Web服務進行編碼並進行代碼生成是一個好主意。 不幸的是,在嘗試使用它之后,我認為如果您知道如何編寫WSDL和XML模式,那么您將擁有更好的互操作性並獲得Web服務的價值。

特別是XML模式部分。 我在學校里,混合方法(首先編寫WSDL,但先簽約模式)可能是最好的方法,因為您無需重復執行綁定代碼。 但是,理解它所必需的技能越來越難。

暫無
暫無

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

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