欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

将webservice嵌套到以完成的web项目中

程序员文章站 2022-06-30 13:53:26
一、先把webservice服务端写入项目(基于spring) 1、在pom.xml中引入WebService相关的jar依赖 2、在web.xml加载启动Webservice 3、创建WebService相关的Spring配置文件:applicationContext-webService.xml ......

 

一、先把webservice服务端写入项目(基于spring)

  1、在pom.xml中引入webservice相关的jar依赖

 1 <!--webservice开始 -->
 2     <!--https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-frontend-jaxws -->
 3         <dependency>
 4             <groupid>org.apache.cxf</groupid>
 5         <artifactid>cxf-rt-frontend-jaxws</artifactid>
 6             <version>3.1.16</version>
 7         </dependency>
 8     <!--https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-transports-http -->
 9         <dependency>
10             <groupid>org.apache.cxf</groupid>
11     <artifactid>cxf-rt-transports-http</artifactid>
12             <version>3.1.6</version>
13         </dependency>
14         <!--webservice结束 -->

 

  2、在web.xml加载启动webservice

 1 <!--webservice -->
 2 
 3 <servlet>
 4 
 5 <servlet-name>cxf</servlet-name>
 6 
 7 <servlet-class>org.apache.cxf.transport.servlet.cxfservlet</servlet-class>
 8 
 9 <load-on-startup>1</load-on-startup>
10 
11 </servlet>
12 
13 <servlet-mapping>
14 
15 <servlet-name>cxf</servlet-name>
16 
17 <url-pattern>/getkpivalue/*</url-pattern>
18 
19 </servlet-mapping>

 

 

  3、创建webservice相关的spring配置文件:applicationcontext-webservice.xml,内容如下:

 

 1 <?xml version="1.0" encoding="utf-8"?>
 2 
 3 <beans xmlns="http://www.springframework.org/schema/beans"
 4 
 5 xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
 6 
 7 xsi:schemalocation="http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
 8 
 9 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
10 
11 <bean id="userserviceimpls" class="com.unis.webservice.userserviceimpls" />
12 
13 <jaxws:endpoint id="userserviceimplservices" address="/" implementor="#userserviceimpls">
14 
15 </jaxws:endpoint>
16 
17 </beans>

  4、把服务端代码迁移到项目的src/main/java/com.webservice,如下图:

将webservice嵌套到以完成的web项目中

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  5、启动项目,并在浏览器中访问地址:http://localhost:8091/getkpivalue?wsdl,如下图:

 将webservice嵌套到以完成的web项目中

 

    出现以上情况说明webservice服务端成功启动!

    代码可参考  https://blog.csdn.net/c99463904/article/details/76018436

    备注:使用注解修改wsdl内容

webservice的注解都位于javax.jws包下:

@webservice-定义服务,在类上边

    targetnamespace:指定命名空间

    nameporttype的名称

    portnameport的名称

    servicename:服务名称

    endpointinterfacesei接口地址,如果一个服务类实现了多个接口,只需要发布一个接口的方法,可通过此注解指定要发布服务的接口。

@webmethod-定义方法,在公开方法上边

    operationname:方法名

    exclude:设置为true表示此方法不是webservice方法,反之则表示webservice方法,默认是false

@webresult-定义返回值,在方法返回值前边

    name:返回结果值的名称

@webparam-定义参数,在方法参数前边

    name:指定参数的名称

 

二、使用xmlwebservice的客户端与服务端进行传递

  1.xmljava对象互转的工具类

 

  1 package com.unis.webservice.util;
  2 import java.io.filenotfoundexception;
  3 import java.io.filereader;
  4 import java.io.filewriter;
  5 import java.io.ioexception;
  6 import java.io.stringreader;
  7 import java.io.stringwriter;
  8 
  9 import javax.xml.bind.jaxbcontext;
 10 import javax.xml.bind.jaxbexception;
 11 import javax.xml.bind.marshaller;
 12 import javax.xml.bind.unmarshaller;
 13  
 14 /**
 15  * xml与java对象互转
 16  * name:
 17  * title:xmlhelper 
 18  * @author lsk 
 19  * @date 2019年1月5日
 20  */
 21 public class xmlhelper
 22 {
 23     //有两种情况,一种是xml字符串,一种是xml文件路径
 24     
 25      /** 
 26      * 将对象直接转换成string类型的 xml输出 
 27      *  
 28      * @param obj 
 29      * @return 
 30      */  
 31     @suppresswarnings("rawtypes")
 32     public static string objecttoxml(class clazz,object obj) {  
 33         // 创建输出流  
 34         stringwriter sw = new stringwriter();  
 35         try {  
 36             // 利用jdk中自带的转换类实现  
 37             jaxbcontext context = jaxbcontext.newinstance(clazz);  
 38             
 39             marshaller marshaller = context.createmarshaller();  
 40             // 格式化xml输出的格式  
 41             marshaller.setproperty(marshaller.jaxb_formatted_output,  
 42                     boolean.true);  
 43             marshaller.setproperty("jaxb.encoding", "gb2312");
 44 
 45             // 将对象转换成输出流形式的xml  
 46             marshaller.marshal(obj, sw);  
 47         } catch (exception e) {  
 48             e.printstacktrace();  
 49         } 
 50         
 51         //去除xml声明中的standalone
 52         return sw.tostring().replace("standalone=\"yes\"", "");  
 53 
 54     }  
 55  
 56       /** 
 57      * 将string类型的xml转换成对象 
 58      */  
 59     @suppresswarnings("rawtypes")
 60     public static object xmltoobject(class clazz, string xml) {  
 61         object xmlobject = null;  
 62         try {  
 63             jaxbcontext context = jaxbcontext.newinstance(clazz);  
 64             // 进行将xml转成对象的核心接口  
 65             unmarshaller unmarshaller = context.createunmarshaller();  
 66             xmlobject = unmarshaller.unmarshal(new stringreader(xml));  
 67         } catch (jaxbexception e) {  
 68             e.printstacktrace();  
 69         }  
 70         return xmlobject;  
 71     }  
 72     
 73     
 74     /** 
 75      * 将对象根据路径转换成xml文件 
 76      *  
 77      * @param obj 
 78      * @param path 
 79      * @return 
 80      */  
 81     public static void converttoxml(object obj, string path) {  
 82         try {  
 83             // 利用jdk中自带的转换类实现  
 84             jaxbcontext context = jaxbcontext.newinstance(obj.getclass());  
 85   
 86             marshaller marshaller = context.createmarshaller();  
 87             // 格式化xml输出的格式  
 88             marshaller.setproperty(marshaller.jaxb_formatted_output,  
 89                     boolean.true);  
 90             // 将对象转换成输出流形式的xml  
 91             // 创建输出流  
 92             filewriter fw = null;  
 93             try {  
 94                 fw = new filewriter(path);  
 95             } catch (ioexception e) {  
 96                 e.printstacktrace();  
 97             }  
 98             marshaller.marshal(obj, fw);  
 99         } catch (jaxbexception e) {  
100             e.printstacktrace();  
101         }  
102     }  
103     
104     /** 
105      * 将xml的文件路径转换成对象 
106      */  
107     @suppresswarnings("rawtypes")
108     public static object convertxmlfiletoobject(class clazz, string xmlpath) {  
109         object xmlobject = null;  
110         try {  
111             jaxbcontext context = jaxbcontext.newinstance(clazz);  
112             unmarshaller unmarshaller = context.createunmarshaller();  
113             filereader fr = null;  
114             try {  
115                 fr = new filereader(xmlpath);  
116             } catch (filenotfoundexception e) {  
117                 e.printstacktrace();  
118             }  
119             xmlobject = unmarshaller.unmarshal(fr);  
120         } catch (jaxbexception e) {  
121             e.printstacktrace();  
122         }  
123         return xmlobject;  
124     } 
125 }


  2.jaxb的简介与常用注解详解 

    jaxbjava architecture for xml binding)是一项可以根据xml schema产生java类的技术

    jaxbcontext类,是应用的入口,用于管理xml/java绑定信息。

     marshaller接口,将java对象序列化为xml数据。

    unmarshaller接口,将xml数据反序列化为java对象。

    以上这几个是jdkjaxb相关重要的classinterface

 

    jdkjaxb相关的重要annotation(注释)

    @xmltype,将java类或枚举类型映射到xml模式类型

    @xmlaccessortype(xmlaccesstype.field) 控制字段或属性是否被默认序列化field表示jaxb自动绑定java类中的每个非静态的(static)、非瞬态的(由@xmltransient标注)字段到xml。其他值有  xmlaccesstype.property和xmlaccesstype.none

    @xmlaccessororder,控制jaxb绑定类中属性和字段的排序

    @xmljavatypeadapter,包、类、字段,方法、参数级别的注解。解决java日期(date),数字(number)格式化问题。

将webservice嵌套到以完成的web项目中

 

     自定义的dateadapter:

 1 public class dateadapter extends xmladapter<string, date> {
 2     private static final simpledateformat sdf = new simpledateformat("yyyy-mm-dd");
 3     @override
 4  public date unmarshal(string date) throws exception{
 5         return sdf.parse(date);
 6     }
 7     @override
 8  public string marshal(date date) throws exception {
 9         return sdf.format(date);
10     }
11 }
将webservice嵌套到以完成的web项目中

 

 

    @xmlelementwrapper ,对于数组或集合(即包含多个元素的成员变量),生成一个包装该数组或集合xml元素(称为包装器)。 

 将webservice嵌套到以完成的web项目中

 

 

    @xmlrootelement类级别的注解,将类映射为xml全局元素,也就是根元素

    @xmlelement字段,方法,参数级别的注解。java类的一个属性映射到与属性同名的一个xml元素。

      属性:

        nillable属性可以指定元素的文本值是否可以为空,默认为false

        required属性可以指定该元素是否必须出现,默认为false

        namespace属性可以指定该元素所属的命名空间

        defaultvalue属性可以指定该元素默认的文本值

    @xmlattribute字段和方法级别的注解。java类的一个属性映射到与属性同名的一个xml属性。

 将webservice嵌套到以完成的web项目中

 

    只用到以上注解,想了解其他详细的可看:   https://blog.csdn.net/lhzjj/article/details/11796713