package com.jfinal.newWebservice;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
/**
* @WebService 该注解用于对接口,类进行注解,表示要发布的web服务
* serviceName:发布的web服务名称;默认java类名+Service(字符串)
* 如 :java类名称为SayWeb ,wsdl文档中 serviceName默认情况 <service name="HelloServiceService">
* name:此属性的值包含XML WebService的名称,对应wsdl文档中portType 的名称,默认java类名
* 如: portType默认情况 <portType name="HelloService">
* portName:对应wsdl文档中portName,缺省值为 WebService.name+Port
* 如:<port name="SayWebPort" binding="tns:SayWebPortBinding"><soap:address location="http://localhost:9001/service/sayweb"/></port>
* targetNamespace:指定你想要的名称空间,默认包名法反写
* targetNamespace="http://say_service/",在<definitions>标签中
* wsdlLocation:指定用于定义 Web Service 的 WSDL 文档的 Web 地址。
* 默认情况是发布地址+?wsdl
*/
@WebService(serviceName="MyService",targetNamespace="http://newWebservice.jfinal.com")
public class HelloService {
/*
* @WebMethod 该注解用于用@WebService注解的类或接口的方法上,表示要发布的方法
* soperationName:指定与此方法相匹配的wsdl:operation 的名称。
* 默认为方法名,如方法为sayHello<operation name="sayHello"></operation>
* 如果在sayHello方法上加注解@WebMethod(operationName="AliassayHello" 客户端调用时,sayHello方法是不存在的, 方法为Hello
@WebMethod(exclude=true) //该方法不会发布
*/
// @WebParam表示方法的参数,@WebResult表示方法的返回值
@WebMethod(operationName="AliassayHello")
public String sayHello(@WebParam(name="name") String name){
System.out.println(1111);
return "hello: " + name;
}
public String sayGoodbye(String name){
System.out.println(1111);
return "goodbye: " + name;
}
@WebMethod(exclude=true)//当前方法不被发布出去
public String sayHello2(String name){
return "hello " + name;
}
@WebMethod
public String testWebParam(@WebParam(name ="name") String name,@WebParam(name ="age") String age,@WebParam(name ="date") String date) {
return "测试成功,姓名+"+name+"年龄"+age+"日期"+date;
}
@WebMethod
public String test(String name, String age,String date) {
return "测试成功,姓名+"+name+"年龄"+age+"日期"+date;
}
@WebMethod
@WebResult(name="myReturn") //方法返回值
public String testWebResult(String name, String age,String date) {
return "测试成功,姓名+"+name+"年龄"+age+"日期"+date;
}
public static void main(String[] args) {
/**
* 参数1:服务的发布地址
* 参数2:服务的实现者
* Endpoint 会重新启动一个线程
*/
Endpoint.publish("http://localhost:8034/web", new HelloService());
System.out.println("Server ready...");
}
}
-
客户端代码:
-
调用接口
-
package com.jfinal.newWebservice;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.ws.RequestWrapper;
import javax.xml.ws.ResponseWrapper;
@WebService(name = "IHelloService", targetNamespace = "http://newWebservice.jfinal.com")
public interface IHelloService {
@WebMethod
public String AliassayHello(@WebParam(name = "name", targetNamespace = "")String name);
public String sayGoodbye(@WebParam(name = "arg0", targetNamespace = "")String argww);
//@WebParam(name ="xxx") xxx必须与接口中一致,参数必须一致
public String testWebParam (@WebParam(name ="name") String name,@WebParam(name ="age") String age,@WebParam(name ="date") String date);
public String test( String name, String age, String date);
public String testWebResult( String name, String age, String date);
}
-
调用实现
package com.jfinal.newWebservice;
importjava.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import com.jfinal.webservice.BaseService;
/**
* 通过客户端编程的方式调用Webservice服务
*
*/
public class App {
public static void main(String[] args) throws Exception {
// 1.发布的相关信息
// wsdl 文件路径
URL wsdlUrl = new URL("http://localhost:8034/web?wsdl");
// 服务发布的 targetNamespace,和 serviceName
// wsdl 文件头的targetNamespace="http://xxxx" name="xxxx"
Service s = Service.create(wsdlUrl, new QName("http://newWebservice.jfinal.com", "MyService"));
// new QName(服务端targetNamespace,服务端口)wsdl 文件最下面有
IHelloService hs = s.getPort(new QName("http://newWebservice.jfinal.com", "HelloServicePort"),
IHelloService.class);
String ret = hs.testWebResult("111", "222", "2223");
// String ret = hs.AliassayHello("111");
System.out.println(ret);
}
}
-
本项目代码结构: