通过调用其生成的代理类消费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输入和输出值来调用哪些代码
访问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,当然你可以定义豆服务等,有没有问题。
打开命令提示符,你必须输入的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代码,
ObjectFactory只创建您需要发送的对象。缺少的是实际的服务类,它有一个方法,可能是getBillInfo,您可以将该对象作为参数提供给该方法。 –
ObjectFactory类具有这两种方法 @XmlElementDecl空间(namespace = “http://billpay.ws.bi.com/”,名字= “getBillInfo”) 公众的JAXBElement createGetBillInfo(GetBillInfo值){ 返回新的JAXBElement ( _GetBillInfo_QNAME,GetBillInfo.class,null,value); } –
Jahangeer
ObjectFactory仅用于创建类,它不会发送或接收任何内容。好的,让我们开始另一种方式......你是如何创建代理类的? wsimport的? –