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

 

一、先把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,如下图:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

    出现以上情况说明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)格式化问题。

 

     自定义的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 }

 

 

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

 

 

 

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

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

      属性:

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

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

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

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

    @XmlAttribute字段和方法级别的注解。Java类的一个属性映射到与属性同名的一个XML属性。

 

 

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

 

posted @ 2019-01-07 16:35  java_lsk  阅读(1182)  评论(0编辑  收藏  举报