北京尚网汇智科技有限公司
您当前所在的位置:尚网汇智网站建设 > JAVA开发/APP开发 > 文章详细
网站建设知识
NEWS
联系我们
  • 网站建设服务电话
  • 400-883-2887
  • 公司地址:北京市昌平科技园区创意大厦2-806
  • 服务项目
    高端网站建设
    移动/微信网站建设
    手机APP开发
    OA/ERP业务系统开发
    网站维护托管
    CMS模板制作

    java调用webservice接口 几种方法

    发布时间:2017-08-03 09:15:58
    webservice的 发布一般都是使用WSDL(web service descriptive language)文件的样式来发布的,在WSDL文件里面,包含这个webservice暴露在外面可供使用的接口。

    下面我们来看Java如何通过WSDL文件来调用这些web service:

    注意,以下的代码并没有经过真正的测试,只是说明这些情况,不同版本的Axis相差很大,大家最好以apache网站上的例子为准,这里仅仅用于说明其基本用法。

    1,直接AXIS调用远程的web service
    我觉得这种方法比较适合那些高手,他们能直接看懂XML格式的WSDL文件,我自己是看不懂的,尤其我不是专门搞这行的,即使一段时间看懂,后来也就忘记了。直接调用模式如下:

    [java] view plain copy
    import java.util.Date;  
    import java.text.DateFormat;  
    import org.apache.axis.client.Call;  
    import org.apache.axis.client.Service;  
    import javax.xml.namespace.QName;  
    import java.lang.Integer;  
    import javax.xml.rpc.ParameterMode;  
      
    public class caClient {  
        public static void main(String[] args) {  
      
            try {  
                String endpoint = "http://localhost:8080/ca3/services/caSynrochnized?wsdl";  
                // 直接引用远程的wsdl文件  
                // 以下都是套路  
                Service service = new Service();  
                Call call = (Call) service.createCall();  
                call.setTargetEndpointAddress(endpoint);  
                call.setOperationName("addUser");// WSDL里面描述的接口名称  
                call.addParameter("userName",  
                        org.apache.axis.encoding.XMLType.XSD_DATE,  
                        javax.xml.rpc.ParameterMode.IN);// 接口的参数  
                call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);// 设置返回类型  
                String temp = "测试人员";  
                String result = (String) call.invoke(new Object[] { temp });  
                // 给方法传递参数,并且调用方法  
                System.out.println("result is " + result);  
            } catch (Exception e) {  
                System.err.println(e.toString());  
            }  
        }  
    }  

    2,直接SOAP调用远程的webservice

    [java] view plain copy
    import org.apache.soap.util.xml.*;  
    import org.apache.soap.*;  
    import org.apache.soap.rpc.*;  
      
    import java.io.*;  
    import java.net.*;  
    import java.util.Vector;  
      
    public class caService {  
        public static String getService(String user) {  
            URL url = null;  
            try {  
                url = new URL(  
                        "http://192.168.0.100:8080/ca3/services/caSynrochnized");  
            } catch (MalformedURLException mue) {  
                return mue.getMessage();  
            }  
            // This is the main SOAP object  
            Call soapCall = new Call();  
            // Use SOAP encoding  
            soapCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);  
            // This is the remote object we're asking for the price  
            soapCall.setTargetObjectURI("urn:xmethods-caSynrochnized");  
            // This is the name of the method on the above object  
            soapCall.setMethodName("getUser");  
            // We need to send the ISBN number as an input parameter to the method  
            Vector soapParams = new Vector();  
      
            // name, type, value, encoding style  
            Parameter isbnParam = new Parameter("userName", String.class, user,  
                    null);  
            soapParams.addElement(isbnParam);  
            soapCall.setParams(soapParams);  
            try {  
                // Invoke the remote method on the object  
                Response soapResponse = soapCall.invoke(url, "");  
                // Check to see if there is an error, return "N/A"  
                if (soapResponse.generatedFault()) {  
                    Fault fault = soapResponse.getFault();  
                    String f = fault.getFaultString();  
                    return f;  
                } else {  
                    // read result  
                    Parameter soapResult = soapResponse.getReturnValue();  
                    // get a string from the result  
                    return soapResult.getValue().toString();  
                }  
            } catch (SOAPException se) {  
                return se.getMessage();  
            }  
        }  
    }  

    3,使用wsdl2java把WSDL文件转成本地类,然后像本地类一样使用,即可。

    这是像我这种懒人最喜欢的方式,仍然以前面的global weather report为例。
    首先 java org.apache.axis.wsdl.WSDL2Java http://www.webservicex.net/globalweather.asmx.WSDL

    原本的网址是http://www.webservicex.net/globalweather.asmx?WSDL,中间个各问号,但是Linux下面它不能解析,所以去掉问号,改为点号。


    那么就会出现4个文件:

    GlobalWeather.java 

    GlobalWeatherLocator.java 

    GlobalWeatherSoap.java

    GlobalWeatherSoapStub.java


    其中GlobalWeatherSoap.java是我们最为关心的接口文件,如果你对RMI等SOAP实现的具体细节不感兴趣,那么你只需要看接口文件即可,在使用的时候,引入这个接口即可,就好像使用本地类一样。


    文章出自:北京网站建设公司-尚网汇智 https://www.net2006.com 如转载请注明出处!
    咨询服务热线
    400-883-2887
    客服电话:400-883-2887  传真:010-51654992  E-mail:support@net2006.com
    本站设计已受版权保护,任何公司及个人不得复制,违者将依法追究责任,特此声明。

    Copyright © 2005-2018 北京尚网汇智科技有限公司 版权所有 京ICP备13031271号
    查找内容: