一、搭建一个webservice服务器
(1)创建一个web项目。这里我创建了一个项目名为TheService。
(2)在src下的com.linkwide.service(自己创建的包名)下创建一个HelloWorldService接口。
- package com.linkwide.service;
- import javax.jws.WebMethod;
- import javax.jws.WebService;
- //使用@WebService注解标注HelloWorldService接口
- @WebService
- public interface HelloWorldService {
- @WebMethod
- public String sayHello(String name,Integer age);
- }
(3)在src下创建com.linkwide.service.impl(自己创建的包名)下创建一个HelloWorldServiceImpl类实现HelloWorldService接口。
package com.linkwide.service.impl;
import javax.jws.WebService;
import com.linkwide.service.HelloWorldService;
@WebService
public class HelloWorldServiceImpl implements HelloWorldService{
@Override
public String sayHello(String name, Integer age) {
// TODO Auto-generated method stub
return "Hello!我是" + name + "今年" + age + "岁";
}
}
(4)在src下创建一个com.linkwide.main(自己创建的包名)下创建一个TheServicePublish类,用于发布webservice服务
package com.linkwide.main;
import javax.xml.ws.Endpoint;
import com.linkwide.service.impl.HelloWorldServiceImpl;
public class TheServicePublish {
public static void main(String[] args) {
//定义WebService的发布地址,这个地址就是提供给外界访问Webervice的URL地址,URL地址格式为:http://ip:端口号/xxxx
String address = "http://127.0.0.1:9000/TheService";
//使用Endpoint类提供的publish方法发布WebService,发布时要保证使用的端口号没有被其他应用程序占用
Endpoint.publish(address, new HelloWorldServiceImpl());
System.out.println("发布成功");
}
}
(5)运行main方法,webservice服务发布成功。
二、编写客户端调用程序。
(1)在编写客户端代码前,首先生成一个wsdl文件。(右击HelloWorldServiceImpl类 -- Web Services -- create Web Serivce -- 直接finish就ok,在WebContent下面将生成一个wsdl文件夹包括一个wsdl文件)
(2)创建一个Web Service Client 项目(在选择wsdl的地方选择刚刚生成的wsdl文件,直接生成项目)
(3)在src下创建 ClientMain类用于调用调用服务端方法测试
package com.linkwide.client;
import java.rmi.RemoteException;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
public class ClientMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
Service service = new Service();
Call call = null;
try {
call = (Call) service.createCall();
} catch (Exception e) {
e.printStackTrace();
}
//调用方法
String methodName = "sayHello";
QName qn = new QName("http://impl.service.linkwide.com/",methodName);
call.setOperationName(qn);
String endpoint = "http://127.0.0.1:9000/TheService?wsdl";
call.setTargetEndpointAddress(endpoint);
call.setUseSOAPAction(true);
String result = "";
try {
// 给方法传递参数,并且调用方法
call.addParameter("arg0", XMLType.XSD_STRING, ParameterMode.IN);
call.addParameter("arg1", XMLType.XSD_INTEGER, ParameterMode.IN);
result = (String) call.invoke(new Object[] {"小青青","100"});
} catch (RemoteException e) {
e.printStackTrace();
}
System.out.println("result is " + result);
}
}
(4)运行main方法。
result is Hello!我是小青青今年100岁。
这样就成功了。