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

 

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

  一、在pom.xml中引入WebService相关的jar依赖web

 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结束 -->

 

  二、在web.xml加载启动Webservicespring

 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>

 

 

  三、建立WebService相关的Spring配置文件:applicationContext-webService.xml,内容以下:apache

 

 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>

  四、把服务端代码迁移到项目的src/main/java/com.webService,以下图:数组

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

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

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

    备注:使用注解修改WSDL内容ide

WebService的注解都位于javax.jws包下: 工具

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

    targetNamespace:指定命名空间

    nameportType的名称

    portNameport的名称

    serviceName:服务名称

    endpointInterfaceSEI接口地址,若是一个服务类实现了多个接口,只须要发布一个接口的方法,可经过此注解指定要发布服务的接口。

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

    operationName:方法名

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

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

    name:返回结果值的名称

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

    name:指定参数的名称

 

2、使用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

相关文章
相关标签/搜索