將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

相關文章
相關標籤/搜索