Java中使用Web Service

1 简介

java写webservice接口
WebService介绍及使用(Java)
SpringBoot+CXF+Maven

WebService 也叫XML Web Service,WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。

2 相关技术

SOAP、WSDL、UDDI(UniversalDescriptionDiscovery andIntegration)三者构成了WebService的三要素.

SOAP

WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议。SOAP提供了标准的RPC方法来调用WebService。
SOAP协议组成:

SOAP协议 = HTTP协议 + XML数据格式

SOAP协议定义了SOAP消息的格式,SOAP协议是基于HTTP协议的,SOAP也是基于XML和XSD的,XML是SOAP的数据编码方式。打个比喻:HTTP就是普通公路,XML就是中间的绿色隔离带和两边的防护栏,SOAP就是普通公路经过加隔离带和防护栏改造过的高速公路。

WSDL

WSDL(Web Services Description Language)就是这样一个基于XML的语言,用于描述WebService及其函数、参数和返回值。它是WebService客户端和服务器端都能理解的标准格式。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的Web service生成WSDL文档,又能导入WSDL文档,生成调用相应WebService的代理类代码。

UDDI

UDDI (Universal Description, Discovery, and Integration) 是一个主要针对Web服务供应商和使用者的新项目。在用户能够调用Web服务之前,必须确定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服务端来编制软件,UDDI是一种根据描述文档来引导系统查找相应服务的机制。UDDI利用SOAP消息机制(标准的XML/HTTP)来发布,编辑,浏览以及查找注册信息。它采用XML格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。

.asmx

是webservice服务程序的后缀名,ASP.NET 使用.asmx 文件来对Web Services的支持。.asmx 文件和.aspx文件一样都属于文本文件。它包含在.aspx文件之中,成为ASP.NET应用程序的一部分。

3 具体实现

java开发

我的第一次WebService接口开发

Java调用webservice.asmx接口

 /**调用webservice.asmx接口
       * 
       * @param method 需要调用的方法
       * @param json    传递的参数
       */
      public static void callWebserviceASMX(String method,String json){
          //获取webservice接口地址
          String url = "http://xxxx/xx/Webservice.asmx";
          //获取域名地址,server定义的
         String soapaction = "http://tempuri.org/";
         
        Service service = new Service();
         
         try {
             Call call = (Call) service.createCall();
             call.setTargetEndpointAddress(url);
             //设置要调用的方法
             call.setOperationName(new QName(soapaction,method));
            //设置要返回的数据类型
             call.setReturnType(new QName(soapaction,method), String.class);
             
             call.setUseSOAPAction(true);
             
             call.setSOAPActionURI(soapaction+method);
             //调用方法并传递参数
             String result = (String) call.invoke(new Object[]{json});
             
             System.out.println("result is:::"+result);
             
             
         } catch (ServiceException e) {
             e.printStackTrace();
         } catch (RemoteException e) {
             e.printStackTrace();
         }
     }

Java 利用xfire调用WebService

XFire是新一代的Java Web服务引擎,XFire使得在JavaEE应用中发布Web服务变得轻而易举。和其他Web服务引擎相比,XFire的配置非常简单,可以非常容易地和Spring集成,它使得Java开发人员终于可以获得和.Net开发人员一样的开发效率。

java调用.net写的webserver接口(.asmx后缀)

核心代码

Service service = new ObjectServiceFactory().create(IWebservice.class); 
XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire()); 
String url= "http://localhost:8080/webservices/services/webservices"; 
IWebservice iw = (IWebservice) factory.create(service, url); 
List list=iw.getTest();

完整代码

package avicit.mms.common;

import javax.xml.namespace.QName;
import org.apache.axis.Constants;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

public class Test {
    public static void main(String[] args) {
        Textaxis();
    }
    //通过axis方式调用webservice接口
    public static void Textaxis() {
        try {
            StringBuffer xml = new StringBuffer();
            xml.append("\n");
            xml.append("\n");
            xml.append("...");
            xml.append("\n");
            // 指出service所在完整的URL
            String url = "http://127.0.0.1:9080/xxx/WebService.asmx";
            //调用接口的targetNamespace
            //targetNamespace 就是你用浏览器打开url 路径加上?wsdl,即http://xxx/WebService.asmx?wsdl 中的targetNamespace属性值
            String targetNamespace = "http://tempuri.org/";
            //所调用接口的方法method
            String method = "addProductRepStage";
            // 创建一个服务(service)调用(call)
            Service service = new Service();
            Call call = (Call) service.createCall();// 通过service创建call对象
            // 设置service所在URL
            call.setTargetEndpointAddress(new java.net.URL(url));
            //设置要调用的方法
            call.setOperationName(new QName(targetNamespace, method));
            //设置要返回的数据类型
            call.setReturnType(new QName(targetNamespace, method), String.class);
            
            call.setUseSOAPAction(true);
            call.setSOAPActionURI(targetNamespace+method);
            
            //变量最好只是用String类型,其他类型会报错,这里的proRepStageInfoXml是.net接口中需要的参数名
            call.addParameter(new QName(targetNamespace, "proRepStageInfoXml"),
                    Constants.XSD_STRING,
                    javax.xml.rpc.ParameterMode.IN);//设置参数名 proRepStageInfoXml  第二个参数表示String类型,第三个参数表示入参  
            
            //调用方法并传递参数
            String flag = (String) call.invoke(new Object[] {xml.toString()});//此处为数组,有几个变量传几个变量
            System.out.println(flag);
        } catch (Exception e){
            e.printStackTrace();
        }
    }
}

你可能感兴趣的:(Java,java)