原生的WebService的实现方式
1、创建一个jar工程
2、定义一个我们要发布的接口
package haiyang.yu.webservice;
import javax.jws.WebService;
/**
* Created on 2018-04-16 8:31
* <p>Title: haiyang.yu.webservice</p>
* <p>Description: </p>
*
* @author <a href="mailto:991138518@qq.com">yuhaiyang</a>
* @version 1.0
*/
@WebService
public interface TimeAlarmBell {
/**
* 问候当前时间
* @param name your name
* @return results
*/
String giveMeDate(String name);
}
3、实现接口将并实现相应的业务
package haiyang.yu.webservice;
import javax.jws.WebService;
import java.util.Date;
/**
* Created on 2018-04-16 8:33
* <p>Title: haiyang.yu.webservice</p>
* <p>Description: </p>
*
* @author <a href="mailto:991138518@qq.com">yuhaiyang</a>
* @version 1.0
*/
@WebService(endpointInterface= "haiyang.yu.webservice.TimeAlarmBell",serviceName="showDate")//指定webservice所实现的接口以及服务名称
public class TimeAlarmBellImpl implements TimeAlarmBell {
@Override
public String giveMeDate(String name) {
return name.concat(",您好!现在是北京时间:").concat(new Date().toString());
}
}
4、发布webservice
package haiyang.yu.webservice;
import javax.xml.ws.Endpoint;
/**
* Created on 2018-04-16 8:36
* <p>Title: haiyang.yu.webservice</p>
* <p>Description: </p>
*
* @author <a href="mailto:991138518@qq.com">yuhaiyang</a>
* @version 1.0
*/
public class TimeAlarmBellPublish {
public static void main(String[] args) {
TimeAlarmBell showDate = new TimeAlarmBellImpl();
//调用Endpoint的publish方法发布Web Service
Endpoint.publish("http://192.168.10.104:8085/showDate", showDate);
System.out.println("Web Service发布成功!");
}
}
5、webservice的调用
package haiyang.yu.webservice;
//import org.apache.commons.lang3.concurrent.BasicThreadFactory;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* Created on 2018-04-16 8:48
* <p>Title: haiyang.yu.webservice</p>
* <p>Description: </p>
*
* @author <a href="mailto:991138518@qq.com">yuhaiyang</a>
* @version 1.0
*/
public class TimeAlarmBellConnection {
public static void main(String[] args) {
// ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(
// 1, new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(false).build());
// scheduledThreadPoolExecutor.scheduleAtFixedRate(new Runnable() {
// @Override
// public void run() {
//创建WSDL的URL,注意不是服务地址
URL url = null;
try {
url = new URL("http://192.168.10.104:8085/showDate?wsdl");
} catch (MalformedURLException e) {
e.printStackTrace();
}
//创建服务名称
//1.namespaceURI - 命名空间地址
//2.localPart - 服务视图名
QName qname = new QName("http://webservice.yu.haiyang/", "showDate");
//创建服务视图
//参数解释:
//1.wsdlDocumentLocation - wsdl地址
//2.serviceName - 服务名称
Service service = Service.create(url, qname);
//获取服务实现类
TimeAlarmBell showDate = service.getPort(TimeAlarmBell.class);
//调用查询方法
String result = showDate.giveMeDate("KevinBruce");
System.out.println(result);
// }
// }, 1, 2, TimeUnit.SECONDS);
}
}
注释掉的内容中使用定时任务去循环调用webservice的接口了,如果想要使用这个定时任务,需要引入common-lang3的jar包
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.6</version>
</dependency>
使用axis1.4的实现方式
下载地址:http://archive.apache.org/dist/ws/axis/1_4/
下载axis-bin-1_4.zip 这个包
使用axis1实现webservice在构建时可能会相对麻烦一些,但是构建成功后,对于一些webservice的方法的实现就简单了很多,可以大大的提高开发效率。
1、创建一个war工程(这是必须的,axis1使用war来发布接口)
2、创建包并定义一个接口(正常的接口,不需要注解)
package haiyang.yu.axis1;
/**
* Created on 2018-04-16 16:37
* <p>Title: haiyang.yu.axis1</p>
* <p>Description: </p>
*
* @author <a href="mailto:991138518@qq.com">yuhaiyang</a>
* @version 1.0
*/
public interface Hello {
/**
* 获取当前时间
* @param user 获取用户
* @return Result
*/
String getLocalDate(String user);
}
3、给这个接口定义一个实现类(该实现类需要有@WebService注解)
package haiyang.yu.axis1;
import javax.jws.WebService;
import java.util.Date;
/**
* Created on 2018-04-16 16:38
* <p>Title: haiyang.yu.axis1</p>
* <p>Description: </p>
*
* @author <a href="mailto:991138518@qq.com">yuhaiyang</a>
* @version 1.0
*/
@WebService
public class HelloImpl implements Hello {
@Override
public String getLocalDate(String user) {
return user.concat(",您好! 当前时间为:").concat(new Date().toString());
}
}
当你写完实现类的时候,你的webservice的接口就已经实现了。接下来的任务就是配置了。
4、配置要发布为webservice的方法
- 修改wabapps/WEB-INF/web.xml文件(添加一个servlet映射)。
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
</web-app>
- 创建一个server-config.wsdd文件(在文件中添加以下内容)
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<globalConfiguration>
<parameter name="sendMultiRefs" value="true" />
<parameter name="disablePrettyXML" value="true" />
<parameter name="adminPassword" value="admin" />
<parameter name="dotNetSoapEncFix" value="true" />
<parameter name="enableNamespacePrefixOptimization" value="false" />
<parameter name="sendXMLDeclaration" value="true" />
<parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl" />
<parameter name="sendXsiTypes" value="true" />
<requestFlow>
<handler type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="session" />
</handler>
<handler type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="request" />
<parameter name="extension" value=".jwr" />
</handler>
</requestFlow>
</globalConfiguration>
<handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper" />
<handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder" />
<handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" />
<transport name="http">
<requestFlow>
<handler type="URLMapper" />
<handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
</requestFlow>
<parameter name="qs:list"
value="org.apache.axis.transport.http.QSListHandler" />
<parameter name="qs:wsdl"
value="org.apache.axis.transport.http.QSWSDLHandler" />
<parameter name="qs.list"
value="org.apache.axis.transport.http.QSListHandler" />
<parameter name="qs.method"
value="org.apache.axis.transport.http.QSMethodHandler" />
<parameter name="qs:method"
value="org.apache.axis.transport.http.QSMethodHandler" />
<parameter name="qs.wsdl"
value="org.apache.axis.transport.http.QSWSDLHandler" />
</transport>
<transport name="local">
<responseFlow>
<handler type="LocalResponder" />
</responseFlow>
</transport>
<!-- 想要添加或者取消修改一下内容即可,AdminService与Version注销不提供服务。 -->
<service name="SayHello" provider="java:RPC">
<parameter name="allowedMethods" value="*" />
<parameter name="className" value="haiyang.yu.axis1.HelloImpl" />
<namespace>http://www.yuhaiyang.com/ocean-axis/sayHello</namespace>
</service>
</deployment>
5、将工程打成war 包放到jetty或者是Tomcat的webapps下,同时将axis-bin-1_4.zip包中解压出来的文件中的webapps目录下的内容复制到jetty或者是Tomcat的webapps下。
6、启动容器我们定义的url即可。
使用axis2-1.7.7的实现方式
下载地址:http://axis.apache.org/axis2/java/core/download.html
下载 axis2-1.7.7-war.zip 这个包
没使用过,后续更新
网友评论