通过调用其生成的代理类消费SOAP WSDL

通过调用其生成的代理类消费SOAP WSDL

问题描述:

你好,我已经消耗在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的? –

访问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

打开命令提示符,你必须输入的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();

`

除了其他的答案 的wsimport存在于JDK安装目录的例子对我来说它 C:\ Program Files文件\的Java \ jdk1.8.0_121 \ BIN 有一个文件的wsimport 在目录中右键单击并使用wsimport -Xnocompile pathToYOURWSDL,它会生成您的java代码,