2017-06-01 71 views
1

你好,我已經消耗在Java中,我生成的代理類這裏是產生通過調用其生成的代理類消費SOAP WSDL

1)Bill.java 
2)BillInfo.java 
3)GetBillInfo.java 
4)GetBillInfoResponse.java 
5)ObjectFactory.java 

現在樣品輸入給我的班級名單SOAP服務由客戶機是如下

-<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
-<soap:Body> 
-<bil:getBillInfo xmlns:ns2="http://billpay.ws.bi.com/" xmlns:bil="http://billpay.ws.bi.com/"> 
-<billInfo> 
-<bill> 
<consumerNo>10300075929</consumerNo> 
<shortName>SNGPL</shortName> 
</bill> 
<channel_id>100</channel_id> 
<password>XXXXXX</password> 
<username>xxx</username> 
<webServiceID>3000</webServiceID> 
<STAN>439624</STAN> 
<channelType>Mobile</channelType> 
</billInfo> 
</bil:getBillInfo> 
</soap:Body> 
</soap:Envelope> 

和輸出從該輸入如下

-<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> 
-<S:Body> 
-<ns2:getBillInfoResponse xmlns:ns2="http://billpay.ws.bi.com/"> 
-<return> 
-<bill> 
<billAmount>150.00</billAmount> 
<billConsumerName>GOHER PIRZADA </billConsumerName> 
<billMonth>2016-01</billMonth> 
<consumerNo>10300075929 </consumerNo> 
<dueDate>2017-08-19</dueDate> 
<lateAmount>160.00</lateAmount> 
<shortName>SNGPL</shortName> 
<utilityCompanyAccount>900083181010586</utilityCompanyAccount> 
</bill> 
<channel_id>0</channel_id> 
<password/> 
<status>Processed OK</status> 
<statusCode>0</statusCode> 
<username/> 
<webServiceID>0</webServiceID> 
</return> 
</ns2:getBillInfoResponse> 
</S:Body> 
</S:Envelope> 

這些是給我的,現在實現這個服務,我已經寫了下面的代碼示例,但它不工作,請看看我的代碼

GetBillInfo gbi = new GetBillInfo(); 
    BillInfo bi = new BillInfo(); 
    bi.setChannelId(100); 
    bi.setPassword("XXXXXX"); 
    bi.setUsername("xxx"); 
    bi.setWebServiceID(3000); 
    bi.setChannelType("Mobile"); 
    bi.setSTAN("439624"); 
    Bill bill = new Bill(); 
    bill.setConsumerNo("10300"); 
    bill.setShortName("SNGPL"); 
    gbi.setBillInfo(bi); 

    ObjectFactory of=new ObjectFactory(); 
    JAXBElement<GetBillInfo> jbx = of.createGetBillInfo(gbi); 

這裏,我並不沒有返回值得到任何迴應,請讓我知道我正在犯什麼錯誤。請讓我知道如何通過查看SOAP輸入和輸出值來調用哪些代碼

+0

ObjectFactory只創建您需要發送的對象。缺少的是實際的服務類,它有一個方法,可能是getBillInfo,您可以將該對象作爲參數提供給該方法。 –

+0

ObjectFactory類具有這兩種方法 @XmlElementDecl空間(namespace = 「http://billpay.ws.bi.com/」,名字= 「getBillInfo」) 公衆的JAXBElement createGetBillInfo(GetBillInfo值){ 返回新的JAXBElement ( _GetBillInfo_QNAME,GetBillInfo.class,null,value); } – Jahangeer

+0

ObjectFactory僅用於創建類,它不會發送或接收任何內容。好的,讓我們開始另一種方式......你是如何創建代理類的? wsimport的? –

回答

1

訪問SOAP WebService的一個基本方法是通過wsimport,它是一個包含在jdk中的java標準工具。

基本上,你調用它像這樣...

wsimport -Xnocompile http://example.com/someService?wsdl 

......或任何您的WSDL的位置,可以是本地文件,太。您可以通過給參數-d(目標文件夾)和- p(您想要創建的軟件包)進行自定義。 -Xnocompile參數只是簡單地給你.java文件而不是編譯的.class文件。

當你使用該命令後,你會得到一些clases。那麼你可以使用它們像這樣...

BillService service = new BillService(); 
BilLServicePortType port = service.getBillServicePort(); 
ObjectFactory of=new ObjectFactory(); 
JAXBElement<GetBillInfo> jbx = of.createGetBillInfo(gbi); 

有沒有必要實際上這裏使用Spring,當然你可以定義豆服務等,有沒有問題。

+0

在哪裏執行這個命令? wsimport -Xnocompile – Jahangeer

+0

控制檯。命令行。 –

+0

它創建以下類 1)Bill.java 2)BillInfo.java 3)GetBillInfo.java 4)GetBillInfoResponse.java 5)ObjectFactory.java 6)ViewBillInfo.java(接口) 7)ViewBillInfo_Service.java – Jahangeer

0

打開命令提示符,你必須輸入的wsimport命令wsimport -p xxx.xxx.xxx -s D:\xxx\xxx http://xxxx:8080/xxxx/xxx?wsdl

這裏-s是你在你的system.Once創建執行此命令,你會得到的Java文件源文件夾,複製的java文件到您的項目。 Then `YourSoapBindingService obj = new YourSoapBindingService(); YourService service = obj.getSoapBindingPort(); service.callYourServiceMethod();

`

0

除了其他的答案 的wsimport存在於JDK安裝目錄的例子對我來說它 C:\ Program Files文件\的Java \ jdk1.8.0_121 \ BIN 有一個文件的wsimport 在目錄中右鍵單擊並使用wsimport -Xnocompile pathToYOURWSDL,它會生成您的java代碼,