java调用webservice WSDL形式接口之apache axis方式调用(一)

java调用webservice WSDL形式接口之apache axis方式调用(一)

分类:Webservice

 (3849)  (0)  举报  收藏

1. 先说一下什么是webservice

webservice的 发布一般都是使用WSDL(web service descriptive language)文件的样式来发布的,在WSDL文件里面,包含这个webservice暴露在外面可供使用的接口。

(1)WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Internet进行基于Http协议的网络应用间的交互。
(2)WebService实现不同语言间的调用,是依托于一个标准,webservice是需要遵守WSDL(web服务定义语言)/SOAP(简单请求协议)规范的。


2. 下面是介绍如何使用axis调用webservice

(1)先从官网下载axis相关jar包,地址:http://axis.apache.org/axis/

官方要求引入如下jar包(将lib下的jar引入即可)

  • axis-/lib/axis.jar
  • axis-/lib/jaxrpc.jar
  • axis-/lib/saaj.jar
  • axis-/lib/commons-logging-.jar
  • axis-/lib/commons-discovery-.jar
  • axis-/lib/wsdl4j-.jar
我在项目中实际用到的最少jar如下:
H:\libs\axis.jar
H:\libs\jaxrpc.jar
H:\libs\commons-logging-1.0.4.jar
H:\libs\commons-discovery-0.2.jar
H:\libs\wsdl4j-1.5.1.jar

(2)具体代码实现
[java]  view plain  copy
  1. package ic;  
  2.   
  3. import javax.xml.rpc.ParameterMode;  
  4.   
  5. import org.apache.axis.client.Call;  
  6. import org.apache.axis.client.Service;  
  7. import org.apache.axis.encoding.XMLType;  
  8.   
  9. public class ICServiceTest1 {  
  10.   
  11.     public static void main(String[] args) {  
  12.   
  13.         try {  
  14.   
  15.             String endpoint = "http://localhost:3000/hy/gw/queryConsignOrder?wsdl";  
  16.   
  17.             Service service = new Service();  
  18.             Call call = (Call) service.createCall();  
  19.             call.setTargetEndpointAddress(endpoint);  
  20.             // WSDL里面描述的接口名称(要调用的方法)  
  21.             call.setOperationName("getLisQueryConsignOrder");  
  22.             // 接口方法的参数名, 参数类型,参数模式  IN(输入), OUT(输出) or INOUT(输入输出)  
  23.             call.addParameter("icSystem", XMLType.XSD_STRING, ParameterMode.IN);  
  24.             call.addParameter("companyFlag", XMLType.XSD_STRING, ParameterMode.IN);  
  25.             call.addParameter("consignOrderNo", XMLType.XSD_STRING, ParameterMode.IN);  
  26.             call.addParameter("orderNo", XMLType.XSD_STRING, ParameterMode.IN);  
  27.             // 设置被调用方法的返回值类型  
  28.             call.setReturnType(XMLType.XSD_STRING);  
  29.             //设置方法中参数的值  
  30.             Object[] paramValues = new Object[] {"4PL","NJHY,NJHF","TC201309172206",""};  
  31.             // 给方法传递参数,并且调用方法  
  32.             String result = (String) call.invoke(paramValues);    
  33.       
  34.             System.out.println("result is " + result);  
  35.         } catch (Exception e) {  
  36.             e.printStackTrace();  
  37.         }  
  38.   
  39.     }  
  40.   
  41. }  

===========================================异常解决=============================================================

今天在调用webserivce接口的时候出现了如下异常

[plain]  view plain  copy
  1. 警告: Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.  
  2. AxisFault  
  3.  faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server  
  4.  faultSubcode:   
  5.  faultString: org/apache/axis/client/Service  
  6.  faultActor:   
  7.  faultNode:   
  8.  faultDetail:   
  9.     {http://xml.apache.org/axis/}stackTrace:org/apache/axis/client/Service  
  10.     at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)  
  11.     at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)  
  12.     at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)  
  13.     at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(Unknown Source)  
  14.     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)  
  15.     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)  
  16.     at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)  
  17.     at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)  
  18.     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)  
  19.     at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)  
  20.     at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)  
  21.     at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)  
  22.     at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)  
  23.     at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)  
  24.     at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(Unknown Source)  
  25.     at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)  
  26.     at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)  
  27.     at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)  
  28.     at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)  
  29.     at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)  
  30.     at org.apache.axis.client.Call.invokeEngine(Call.java:2784)  
  31.     at org.apache.axis.client.Call.invoke(Call.java:2767)  
  32.     at org.apache.axis.client.Call.invoke(Call.java:2443)  
  33.     at org.apache.axis.client.Call.invoke(Call.java:2366)  
  34.     at org.apache.axis.client.Call.invoke(Call.java:1812)  
  35.     at com.pcitc.lis.ws.lisforcrm.LisForCrmWebServicePortBindingStub.createPickupOrder(LisForCrmWebServicePortBindingStub.java:345)  
  36.     at com.pcitc.lis.ws.lisforcrm.LisForCrmWebServiceDelegateProxy.createPickupOrder(LisForCrmWebServiceDelegateProxy.java:74)  
  37.     at com.pcitc.lis.ws.lisforcrm.test.Test.main(Test.java:24)  
  38.   
  39.     {http://xml.apache.org/axis/}hostname:USER-20150617TZ  
  40.   
  41. org/apache/axis/client/Service  
  42.     at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)  
  43.     at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)  
  44.     at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)  
  45.     at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(Unknown Source)  
  46.     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)  
  47.     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)  
  48.     at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)  
  49.     at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)  
  50.     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)  
  51.     at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)  
  52.     at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)  
  53.     at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)  
  54.     at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)  
  55.     at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)  
  56.     at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(Unknown Source)  
  57.     at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)  
  58.     at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)  
  59.     at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)  
  60.     at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)  
  61.     at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)  
  62.     at org.apache.axis.client.Call.invokeEngine(Call.java:2784)  
  63.     at org.apache.axis.client.Call.invoke(Call.java:2767)  
  64.     at org.apache.axis.client.Call.invoke(Call.java:2443)  
  65.     at org.apache.axis.client.Call.invoke(Call.java:2366)  
  66.     at org.apache.axis.client.Call.invoke(Call.java:1812)  
  67.     at com.pcitc.lis.ws.lisforcrm.LisForCrmWebServicePortBindingStub.createPickupOrder(LisForCrmWebServicePortBindingStub.java:345)  
  68.     at com.pcitc.lis.ws.lisforcrm.LisForCrmWebServiceDelegateProxy.createPickupOrder(LisForCrmWebServiceDelegateProxy.java:74)  
  69.     at com.pcitc.lis.ws.lisforcrm.test.Test.main(Test.java:24)  

这种异常不是程序抛出来的,是由服务器抛出的,所以在程序里抓不到异常。

出现此种问题要注意一下是否已经把接口中用到的jar包加进了服务器中或者项目中。

我用的webservice接口的服务器为TOMCAT,此时需要将webservice接口中用到的jar到全部放到tomcat的lib下,这样做后,异常解决

你可能感兴趣的:(axis)