WebService简单使用

Posted CodeZLei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WebService简单使用相关的知识,希望对你有一定的参考价值。

一.WebService发布服务方式

  方式一:使用jre自己提供的方式 jax-ws

    1)在类上或者相应类的接口或者抽象类上添加注解@WebService

    2)发布服务 Endpoint.publish("http://127.0.0.1:8800/hello", new HelloServiceImpl());

    3) http://127.0.0.1:8800/hello?wsdl 可以正常显示说明发布服务成功

  方式二:使用CXF的方式发布服务

    1)需要引入相应的jar包

        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>2.2.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>2.2.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http-jetty</artifactId>
            <version>2.2.3</version>
        </dependency>
CXF发布服务需要引入的jar

    2)在类上或者相应类的接口或者抽象类上添加注解@WebService

    3)发布服务 Endpoint.publish("http://127.0.0.1:8800/hello", new HelloServiceImpl());

    4) http://127.0.0.1:8800/hello?wsdl 可以正常显示说明发布服务成功 和 方式一 生成的wsdl文档不太一样了

二.WebService调用服务方式

  方式一:使用jre自己提供的方式 jax-ws 可以针对任何情况

    a.选择新建 Web Service Client

    

    b.输入wsdl地址并点击 Finish

    c.调用生成的代码

      1.使用代理的方式

        WSServerProxy wsServerProxy = new WSServerProxy();
        String execBusinessMethod = wsServerProxy.execBusinessMethod("nice", "123213");
        System.out.println(execBusinessMethod);    
代理方式调用服务端

      2.使用接口方式

       //注意接口要和服务端一致的注解@WebService@WebParam....
         URL url = new URL("http://127.0.0.1:8899/zl?wsdl"); //服务的wsdl文档地址
        QName qname=new QName("http://zl.com/","WSServerService"); //wsdl上的targetNamespace,和后面的name的值
        Service service=Service.create(url, qname);
        WSServer ms=service.getPort(WSServer.class);
        String hello = ms.execBusinessMethod("good", "123123");
        System.out.println(hello);    
接口方式调用服务端

  方式二:使用axis方式调用 只能是CXF的提供服务的方式

    a.需要引用的jar

<!-- 引用的jar包 -->
<!-- https://mvnrepository.com/artifact/axis/axis -->
    <dependency>
        <groupId>axis</groupId>
        <artifactId>axis</artifactId>
        <version>1.4</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api -->
    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>javax.mail-api</artifactId>
        <version>1.5.5</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.activation/activation -->
    <dependency>
        <groupId>javax.activation</groupId>
        <artifactId>activation</artifactId>
        <version>1.1</version>
    </dependency>
axis调用服务要引用的jar

    b.调用服务代码 注意包不要引错

import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;

import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

        //new 一个服务
        Service sv = new Service();  
        //创建一个call对象
        Call call = (Call) sv.createCall();  
        //设置要调用的接口地址
        call.setTargetEndpointAddress(new URL("http://127.0.0.1:8899/hello")); 
        //设置要调用的接口方法 
        call.setOperationName(new QName("getHello"));  
        //设置参数 第二个参数表示String类型,第三个参数表示入参
        call.addParameter("str", org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);
        //返回参数类型
        call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
        //开始调用方法并返回相应数据信息,以xml格式的字符串返回,也可以json格式主要看对方用什么方式返回
        Object result =  call.invoke(new Object[]{"nice"});
        System.out.println(result);//打印字符串
调用服务代码

 

   

    

    

以上是关于WebService简单使用的主要内容,如果未能解决你的问题,请参考以下文章

WebService简单使用教程

Java RMI地址解析问题

java调用c#的webservice,如何传递DateTime

Qt调用WebService

在spring中使用webservice(Restful风格)

WebService2