Advertisement

java jws-_java JWS 应用及实践

阅读量:

1. 接口类

package bob.webservice.jwsTest;

import javax.jws.WebParam;

import javax.jws.WebResult;

import javax.jws.WebService;

import javax.jws.soap.SOAPBinding;

@WebService

@SOAPBinding(style = SOAPBinding.Style.RPC)

public interface IMyService {

@WebResult(name="addResult")

public int add(@WebParam(name="a")int a,@WebParam(name="b")int b);

@WebResult(name="loginUser")

public User login(@WebParam(name="username")String username,@WebParam(name="password")String password);

}

2. 实现类

package bob.webservice.jwsTest;

import javax.jws.WebParam;

import javax.jws.WebService;

@WebService(endpointInterface="bob.webservice.jwsTest.IMyService") //这里必须是可以检索到的全路径

public class MyServiceImpl implements IMyService {

public MyServiceImpl() {

// TODO Auto-generated constructor stub

}

@Override

public int add(int a, int b) {

System.out.println(a + "+" + b + "=" + (a + b));

return a+b;

}

@Override

public User login(@WebParam(name = "username") String username,

@WebParam(name = "password") String password) {

System.out.println(username + " is logging");

User user = new User();

user.setId("1");

user.setUsername(username);

user.setPassword(password);

return user;

}

}

涉及到的实体类

package bob.webservice.jwsTest;

public class User {

public User() {

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

private String id;

private String username;

private String password;

}

3.生产 及注册 WS服务

package bob.webservice.jwsTest;

import javax.xml.ws.Endpoint;

public class MyServer {

public MyServer() {

// TODO Auto-generated constructor stub

}

public static void main(String[] args) {

String address = "http://localhost:8882/ns";

Endpoint.publish(address, new MyServiceImpl());

System.out.println("JAX-WS WebService 服务已启动 发布成功!!!!");

}

}

4. 本地客户端模拟调用

package bob.webservice.jwsTest;

import java.net.MalformedURLException;

import java.net.URL;

import javax.xml.namespace.QName;

import javax.xml.ws.Service;

public class TestClient {

public TestClient() {

// TODO Auto-generated constructor stub

}

//Wsimport -d C:/work/me/default/marsworkspace/javaProject/bobTest/ -keep -verbose http://localhost:8882/ns?wsdl

//

public static void main(String[] args) {

try {

//创建访问wsdl服务地址的url

URL url = new URL("http://localhost:8882/ns?wsdl"); //URL接口知道,但是下面的未必公开

//通过QName指明服务的和具体信息

//反方向

QName sname= new QName("http://jwsTest.webservice.bob/","MyServiceImplService");

//创建服务

Service service = Service.create(url,sname);

//实现接口

IMyService ms =service.getPort(IMyService.class);

System.out.println(ms.add(12, 33));

System.out.println(ms.add(1, 3));

User user = ms.login("bob", "123456");

System.out.println("current userId = "+user.getId()+" name:"+user.getUsername());

} catch (MalformedURLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

这样的问题, 这个地址 是对外公开的,但是其他客户端的类包就没有公开,换句话讲,没法用

URL url = new URL("http://localhost:8882/ns?wsdl"); //URL接口知道,但是下面的未必公开

我们可以通过jdk,使用导出命令,将wsdl中的接口描述来生成这个接口以及实现类,然后将生成的接口和实现类应用在我们自己的java程序中就可以了,具体的生成命令是:Wsimport -d C:/work/me/default/marsworkspace/javaProject/bobTest/ -keep -verbose http://localhost:8882/ns?wsdl
0818b9ca8b590ca3270a3433284dd417.png

可以集成到本地,(User.java IMyService.java)进行访问及调用。

要提醒指出的是,wsimport可以用于非Java的服务器端,如:服务器端也许是C# 编写的web service,通过wsimport则生成Java的客户端实现。

命令参数说明:

-d 生成客户端执行类的class文件的存放目录

-s 生成客户端执行类的源文件的存放目录

-p 定义生成类的包名

全部评论 (0)

还没有任何评论哟~