`
747017186
  • 浏览: 333980 次
社区版块
存档分类
最新评论

webservice的搭建

    博客分类:
  • java
 
阅读更多

最近在做一个综合的接口系统,需要搭建webservice上网查了好多资料,觉得jdk自带的搭建方式很简单,并且是轻量级的。下面看例子:

定义对外的接口SayHiService

 

package service;

import java.util.Date;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;

/**
 * 作为测试的WebService接口
 * 
 * @author Johness
 * 
 */
@WebService
@SOAPBinding(style = SOAPBinding.Style.RPC)
public interface SayHiService {

    /**
     * 执行测试的WebService方法
     */
    @WebMethod
    void SayHiDefault();

    /**
     * 执行测试的WebService方法(有参)
     * 
     * @param name
     */
    @WebMethod
    void SayHi(@WebParam(name = "name") String name);
    
    /**
     * 得到json字符串
     * @return
     */
    @WebMethod
    String getJson();
    
    /**
     * 执行测试的WebService方法(用于时间校验)
     * 
     * @param clentTime 客户端时间a
     * @return 0表示时间校验失败 1表示校验成功
     */
    @WebMethod
    @WebResult(name = "valid")
    int CheckTime(@WebParam(name = "clientTime") Date clientTime);
}

 接口实现SayHiServiceImp:

 

 

package service.imp;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;

import service.SayHiService;

/**
 * 作为测试的WebService实现类
 * 
 * @author Johness
 * 
 */
@WebService(endpointInterface = "service.SayHiService")
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class SayHiServiceImp implements SayHiService {

    @Override
    public void SayHiDefault() {
        System.out.println("Hi, Johness!");
    }

    @Override
    public void SayHi(String name) {
        System.out.println("Hi, " + name + "!");
    }

    @Override
    public int CheckTime(Date clientTime) {
        // 精确到秒
        String dateServer = new java.sql.Date(System.currentTimeMillis())
                .toString()
                + " "
                + new java.sql.Time(System.currentTimeMillis());
        String dateClient = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
                .format(clientTime);
        return dateServer.equals(dateClient) ? 1 : 0;
    }

	@Override
	public String getJson() {
		// TODO Auto-generated method stub
		return "123456789";
	}
}

 服务发布,服务发布有两种类型,第一种是直接发布,第二种是基于web的发布。

 

第一种发布:

两个参数,一个是写发布的地址,另外是webservice接口的实现类的实例。

 

package mian;

import javax.xml.ws.Endpoint;

import service.imp.SayHiServiceImp;

public class Main {

    /**
     * 发布WebService
     * 简单
     */
    public static void main(String[] args) {
        Endpoint.publish("http://localhost:8080/testjws/service/sayHi", new SayHiServiceImp());
        System.out.println("publish success~");
    }
}

 第二种发布:

 

在web-info下新建一个配置文件sun-jaxws.xml,保证编码为UTF-8。

implementation:是实现类

url-pattern发布的路径名称(项目名除外)

 

<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"
    version="2.0">
    <endpoint name="SayHiService"
        implementation="service.imp.SayHiServiceImp"
        url-pattern="/service/sayHi" />
</endpoints>

 web.xml的配置

住的注意的是,servlet的配置url-patten要和sun-jaxws.xml的url-pattern必须相同。

 

<listener>  
       <listener-class>
           com.sun.xml.ws.transport.http.servlet.WSServletContextListener  
       </listener-class>
   </listener>
   <servlet>
       <servlet-name>SayHiService</servlet-name>  
       <servlet-class>
           com.sun.xml.ws.transport.http.servlet.WSServlet  
       </servlet-class>
   </servlet>  
   <servlet-mapping>  
       <servlet-name>SayHiService</servlet-name>  
       <url-pattern>/service/sayHi</url-pattern>
   </servlet-mapping>

 配置好了之后,直接启动服务器即可。

访问

在浏览器直接输入:http://localhost:8080/testjws/service/sayHi?wsdl访问。

接口方法测试

服务启动之后怎么去测试呢?一般使用jdk自带工具wsimport生成客户端:

在命令行下输入:

D:\>"%JAVA_HOME%\bin\wsimport" -keep -d .\wsclient -p client http://localhost:8080/testjws/service/sayHi?wsdl直接生成测试的代码。

package test;

import java.util.Date;
import java.util.GregorianCalendar;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;

import client.SayHiService;
import client.SayHiServiceImpService;


public class Test {

    public static void main(String[] args) throws DatatypeConfigurationException {
        // 获取service
        SayHiService service = new SayHiServiceImpService().getSayHiServiceImpPort();
        
        // sayhi
        service.sayHiDefault();
        service.sayHi("Ahe");
        System.out.println(service.getJson());
        // checktime
        // 这里主要说一下时间日期的xml传递,方法还略显复杂
//        GregorianCalendar calender = new GregorianCalendar();
//        calender.setTime(new Date(System.currentTimeMillis()));
//        XMLGregorianCalendar xmldate = DatatypeFactory.newInstance().newXMLGregorianCalendar(calender);
//        System.out.println(service.checkTime(xmldate));
    }
}

 

其中SayHiService service = new SayHiServiceImpService().getSayHiServiceImpPort();当中的SayHiService 与SayHiServiceImpService都是客户端生成的,不是原始的webservice接口当中的类。这个要特别注意。客户端生成的代码在这里没有写出来。这里只提供怎么调用测试即可。

 

在提供一个测试:

package test.client;

import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import com.alibaba.fastjson.JSONObject;
import hw.hlatform.secg.utils.viewmodel.ws.base.BaseHead;
import hw.hlatform.secg.utils.viewmodel.ws.base.Common;
import hw.hlatform.secg.utils.viewmodel.ws.login.LoginBody;


public class TestMain {
	public static void main(String[] args) throws Exception {
		URL url = new URL("http://localhost:8082/api/services/secgMSWebservice?wsdl");
        QName qname = new QName("http://impl.ws.service/", "PublicServiceImpService");
        Service service = Service.create(url, qname);
        PublicService hello = service.getPort(PublicService.class);
        
        BaseHead head=new BaseHead();
        head.setAppId("1");
        head.setAuthorKey("1");
        head.setToken("1");
        head.setService(Common.Login);
        
        LoginBody body=new LoginBody();
        body.setLoginCode("15101069284");
        body.setLoginPass("062C683DC9D180950DB3CDA053DA4AB3");
        body.setAction("0");
        body.setTimestamp("2016-09-20 10:47:47");
        
        String result=hello.callService(JSONObject.toJSONString(head), JSONObject.toJSONString(body));//调用接口方法
        System.out.println(result);
    }
}

 

 

 

分享到:
评论

相关推荐

    webservice搭建的系统java源码包

    标题“webservice搭建的系统java源码包”暗示了这是一个使用Java语言开发的Web服务系统。它可能包含了完整的源代码,允许开发者深入理解Web服务的构建过程,并能对其进行定制或扩展。通过这个源码包,我们可以学习到...

    springboot+webservice搭建webservice服务端

    本教程将讲解如何使用Spring Boot来搭建一个Web Service服务端,并介绍如何利用Java客户端进行调用。 ### 一、Spring Boot与Web Service Spring Boot简化了Java应用的启动和配置,通过“约定优于配置”的原则,...

    springboot+webservice搭建webservice服务端及使用java客户端两种方式进行调用webservice接口

    总结,本教程详细介绍了如何利用Spring Boot和Apache CXF搭建Web Service服务端,以及使用JAX-WS的`javax.xml.ws.Service`和Apache CXF的`JaxWsProxyFactoryBean`两种方式实现Java客户端调用。这些技能对于开发者来...

    WebService 最简单搭建 Demo

    这个“WebService最简单搭建Demo”旨在为初学者提供一个快速上手的教程,帮助理解并实践WebService通信技术。 首先,我们要了解WebService的核心概念:SOAP(Simple Object Access Protocol)和WSDL(Web Services ...

    java搭建一个简单的WebService

    Java 搭建一个简单的WebService Java 搭建一个简单的WebService 的主要知识点可以总结为以下几个方面: 1. 什么是 WebService? WebService 是一种构建应用程序的普遍模型,可以在任何支持网络通信的操作系统中...

    Axis开发webservice搭建指南

    Axis开发Web服务(Webservice)的搭建过程是一个系统性的步骤,涉及到服务器端的配置和客户端的调用。在本文中,我们将深入探讨如何使用Apache Axis框架来创建和部署Web服务。Apache Axis是一个开源工具,它允许...

    【java项目整合Axis1.4webservice搭建实例】服务端代码

    本实例主要探讨如何将Axis1.4与Java项目整合,搭建Web服务的服务端。下面我们将详细阐述Axis1.4、Web服务以及如何在服务端进行设置。 一、 Axis1.4简介 Axis1.4是Apache软件基金会开发的一个Java Web服务栈,它基于...

    Axis2集成SSH搭建WebService源代码

    Axis2集成SSH搭建WebService项目的源代码,这个里面不包含各种依赖jar包,需要的朋友在我的CSDN里面找自行下载吧!另外,我写了一篇文章,详细介绍了如何搭建的,图文源码都有,还有测试用例。希望对大家有所帮助。

    【java项目整合Axis1.4webservice搭建实例】客户端代码

    本文将深入探讨如何使用Axis1.4与Java项目整合,搭建Web服务客户端,并通过具体的客户端代码实例进行详解。 首先,我们需要理解Web服务的基本概念。Web服务是一种基于互联网的、平台无关的交互方式,允许不同系统...

    手把手教你用axis1.4搭建webservice

    标题中的“手把手教你用axis1.4搭建webservice”是指一篇教程,旨在指导读者如何使用Axis1.4这个开源工具来创建和部署Web服务。Axis是Apache软件基金会的一个项目,它提供了一种简单的方式来实现Java到SOAP(Simple ...

    使用jboss netty 创建高性能webservice客户端及服务端

    在IT行业中,网络通信是至关重要的一个环节,特别是在开发分布式系统和Web服务时。JBoss Netty是一个高性能、异步事件驱动的网络应用程序框架,它为快速开发可维护的高性能协议服务器和客户端提供了丰富的API。...

    webservice服务器的搭建

    本文档详细的介绍了webservice服务器端搭建的详细步骤,及其原理,适合初学者使用

    webService服务搭建详解

    ### WebService服务搭建详解 在本篇文章中,我们将详细介绍如何使用Apache Axis2来搭建WebService服务。Axis2是一款功能强大、灵活且高效的WebService框架,广泛应用于Java应用中的远程服务调用场景。本文旨在帮助...

    泛微 ecology9.0 文档(DocService)WebService接口使用说明

    ### 泛微ecology9.0文档(DocService)WebService接口使用详解 #### 一、部署准备工作 在开始使用泛微ecology9.0的DocService WebService接口之前,需要进行一系列的部署准备工作。 ##### 1. 更新lib目录下的文件...

    CXF WebService整合Spring代码(包含服务,客户端两个工程 和 文档)

    CXF WebService整合Spring代码(包含服务,客户端两个工程 和 文档) 需要视频的话,留邮箱

    java快速搭建webservice

    Java 搭建 WebService 的过程简单明了,适合初学者快速上手。本文将详细介绍如何使用 Java 来创建和发布一个 WebService,以及涉及的关键技术。 首先,我们需要理解 WebService 的基本概念。WebService 是一种跨...

    使用php搭建webService服务器(代码实例)

    使用 PHP 搭建 WebService 服务器 在本文中,我们将讨论如何使用 PHP 搭建 WebService 服务器,并详细介绍 WSDL 概念网络服务描述语言的基本结构和元素。 WSDL 概念 WSDL(Web Service Description Language)是...

    SSH搭建webservice服务

    SSH 搭建 WebService 服务 在本文中,我们将讨论如何在已有的 Struts2+Spring3 项目中搭建 WebService 服务,使用 CXF2.6 实现。该方法适合新手维护老系统搭建 WebService,使用非注解方式,比较老的方式。 Struts...

    使用CXF搭建webService服务

    使用cxf搭建webService,客户端通过接口进行调用

Global site tag (gtag.js) - Google Analytics