梦相随1006

版权归 梦相随1006 所有,未经 https://www.cnblogs.com/xin1006 作者许可,严禁转载

导航

webservice01#第一个例子#wsimport

1, WebService 是实现异构平台间的交互;CXF、Axis、Metro等框架可以帮我们实现WebService;Jax-WS(Java api xml webservice)是基于java api实现的webservice。


2,快速实现一个基于JWS的WebService项目步骤;
    1,服务器的建立:  创建接口;创建实现类;启动服务。
        两个专有名词: SEI(Service Endpoint interface)服务提供接口,SIB(Service implemention Bean)

  简单例子:

  接口

package com.yangw.webservice.service;
import javax.jws.WebService;

//说明该接口是服务提供接口
@WebService
public interface IMyService {

    public int add(int a,int b);    
    public int minus(int a,int b);
}

  实现类  

package com.yangw.webservice.service;
import javax.jws.WebService;

//说明此类是那个接入点接口的实现类
@WebService(endpointInterface="com.yangw.webservice.service.IMyService")
public class MyServiceImpl implements IMyService {

    @Override
    public int add(int a, int b) {
        System.out.println(a+"+"+b+"="+(a+b));
        return a+b;
    }
    @Override
    public int minus(int a, int b) {
        System.out.println(a+"-"+b+"="+(a-b));
        return a-b;
    }
}

  启动服务

package com.yangw.webservice.service;

import javax.xml.ws.Endpoint;

public class MyService {

    public static void main(String[] args) {
        //  发布到的地址
        String address="http://localhost:8888/ns";
        Endpoint.publish(address, new MyServiceImpl());
    }

}

  然后在浏览器中输入: http://localhost:8888/ns?wsdl ,即可看到如下内容:

<definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://service.webservice.yangw.com/" 
  xmlns:xsd
="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/"
  targetNamespace
="http://service.webservice.yangw.com/" name="MyServiceImplService"> <types> <xsd:schema> .......

  客户端程序来访问:

package com.yangw.webservice.service;

import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;

public class MyClient {

    public static void main(String[] args) {
        try {
            URL url=new URL("http://localhost:8888/ns?wsdl");
            //生成QName(名称空间,本地webservice提供的名称)
//名称空间,即前面的
targetNamespace的内容

QName qName=new QName("http://service.webservice.yangw.com/","MyServiceImplService"); Service service=Service.create(url, qName); //从service中获得具体需要的接口 IMyService ms=service.getPort(IMyService.class); System.out.println(ms.add(1, 2)); } catch (MalformedURLException e) { e.printStackTrace(); } } }

  客户端程序执行结果就会 打印出 3

    上面客户端的不足:  本地依赖了服务端的IMyService接口

3, wsimport的使用

  1·,创建一个目录,用于放wsimport命令生成的文件,只要安装了java6都会有这个命令

    -d            后跟目录

    -verbose   显示详细过程

    -p             后跟包名,默认是 名称空间反过来

    -keep         生成class文件后,保存源代码即java文件

    

  2,将生成好的文件复制到新建的项目中,复制这个包即可。

  

  然后写一个访问的客户端程序,这次就很简单了

  *** 如果修改了服务器端的代码,需要使用wsimport重新导入***

 

package com.yangw.webservice.service;

import java.net.URL;

import javax.xml.namespace.QName;

public class MyClient {

    public static void main(String[] args) throws Exception{
        MyServiceImplService msis=new MyServiceImplService();
        //获取服务接口,这个IMyService是我们本地的接口
        IMyService ims=msis.getMyServiceImplPort();
        System.out.println(ims.minus(10, 4)); 
        //结果为6,
        
        //我们也可以使用代参数的构造,指定URL和QName
        URL url=new URL("http://localhost:8888/ns?wsdl");
        //生成QName(名称空间,本地webservice提供的名称)
        QName qName=new QName("http://service.webservice.yangw.com/","MyServiceImplService");
        MyServiceImplService msis2=new MyServiceImplService(url,qName);
        IMyService ims2=msis2.getMyServiceImplPort();
        System.out.println(ims2.add(10, 4)); 
    }

}

 

 

 

 

 

 

 

posted on 2014-02-20 15:56  梦相随1006  阅读(284)  评论(0编辑  收藏  举报