c++编写web服务_让我们编写一个文档样式的Web服务
c++編寫web服務
您可能知道,我們可以使用四種主要的Web服務樣式。 它們如下:
- 文件/文學
- 包裝的文件/文學
- RPC /編碼
- RPC /文字
當然,現在不建議使用RPC /編碼樣式。 如果您有興趣,可以在此處找到這篇非常全面的文章,以了解不同的Web服務樣式及其優點。
今天,我們將看到如何編寫一種Web服務的Document / Literal包裝器。 該職位的議程如下:
- 根據包裝的文檔/文字編寫一個簡單的Web服務
- 如何在tomcat Web容器上托管簡單的Web服務
- 一個簡單的測試客戶即可測試我們的服務
因此,讓我們開始旅程:
- 根據包裝的文檔/文字編寫一個簡單的Web服務
這是我們的基本Web服務。 這是我們服務的基本接口。 如您所見,我們首先使用@ javax.jws.WebService對其進行注釋,以指示其將要編寫的Web服務。 接下來是我們定義SOAPBinding的有趣部分。 在這里,我們聲明我們要編寫一個DOCUMENT風格的Web服務,該服務是LITERAL風格,并且是WRAPPED風格。 這里要注意的一件事是,Soap Binding批注中指定的所有三個屬性值都是默認值,因此您可以不必在此處明確聲明而無需使用它們。 我這樣做是為了使本文清晰。
繼續,讓我們看看該特定接口的實現如何:
package com.wsbindings;import javax.jws.WebService;@WebService(endpointInterface="com.wsbindings.AddService") public class AddServiceImpl implements AddService{public int addIntegers(int paramOne, int paramTwo) {return paramOne+paramTwo;}}同樣,此服務的功能也沒有什么特別之處。 只需將傳入的兩個數字相加,然后發回相加結果。 請注意,在這里我們再次必須使用@WebService批注對實現類進行批注。 現在,我們已經完成了編寫Web服務合同和實現的初始部分,讓我們看看如何將其托管在tomcat Web容器上。
- 如何在tomcat Web容器上托管簡單的Web服務
如您所知,默認情況下,tomcat不帶有JAX-WS實現,這與典型的應用程序服務器(例如JBoss,Glassfish)不同。 因此,要使其正常工作,您需要獲得JAX-WS規范的實現。 在這種情況下,我們將使用Metro 。 您可以將jar文件從下載文件復制到WEB-INF / lib目錄,也可以使用Maven為您完成,這就是我將在本文中做的。 因此,為了獲得與Metro實施相關的require jar文件,我將以下依賴項添加到pom中:
<dependency><groupId>com.sun.xml.ws</groupId><artifactId>jaxws-rt</artifactId><version>2.1.3</version><exclusions><exclusion><groupId>com.sun.xml.stream</groupId><artifactId>sjsxp</artifactId></exclusion></exclusions></dependency>請注意,我在這里為sjsxp工件添加了一個排除項,因為我需要的是比從傳遞依賴中繪制的版本更高的版本。 否則,您將獲得以下異常。
無法初始化類javax.xml.stream.XMLStreamException:編碼UTF-8的底層流和writeStartDocument()方法utf-8的輸入參數不匹配。
為了解決此問題,我需要向pom添加以下依賴項:
<dependency><groupId>com.sun.xml.stream</groupId><artifactId>sjsxp</artifactId><version>1.0.1</version></dependency>多虧了該線程,我才能夠找到此解決方案。
繼續,我們需要定義一個特定的xml文件,該文件應位于名為sun-jaxws.xml的WEB-INF目錄下 。 該XML指定我們如何訪問我們的Web服務以及在何處找到實現類。 讓我們看一下該文件的內容:
<?xml version="1.0" encoding="UTF-8"?> <endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0"><endpointname="AddWS"implementation="com.wsbindings.AddServiceImpl"url-pattern="/addws"/> </endpoints>在這里,我們提供了Web服務實現類所駐留的包以及有關如何訪問特定Web服務的URL模式。 我們要做的最后一件事是將以下內容添加到web.xml中,以便成功托管我們的Web服務:
<listener><listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class></listener><servlet><servlet-name>AddWS</servlet-name><servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class></servlet><servlet-mapping><servlet-name>AddWS</servlet-name><url-pattern>/addws</url-pattern></servlet-mapping>注意,我們必須定義一個上下文偵聽器和一個Servlet類,它們將處理我們的Web服務調用。 如果查看WSServletContextListner的源代碼,則會看到它從WEB-INF目錄讀取sun-jaxws.xml文件,并相應地為Web服務上下文創建類加載器。 關于文檔樣式Web服務的一件事是,您需要為請求和響應生成一些代碼。 如果不這樣做,則會出現以下錯誤并顯示以下消息:
您是否運行過APT來生成它們?
您可以使用JDK安裝隨附的wsgen工具生成所需的類。 您還可以使用Apache-CXF為您生成這些類。 我們將通過提供給我們的apache-cxf maven插件來使用后一種方法。 將以下內容添加到您的pom和您的物品中;
<plugin><groupId>org.apache.cxf</groupId><artifactId>cxf-codegen-plugin</artifactId><version>2.0.9</version><dependencies><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxws</artifactId><version>2.0.9</version></dependency></dependencies><executions><execution><id>generate-wsdl</id><phase>process-classes</phase><configuration><className>com.wsbindings.AddServiceImpl</className><argline>-classdir ${project.build.directory}/classes</argline></configuration><goals><goal>java2wsdl</goal></goals></execution></executions></plugin>在這里,我們使用java2wsdl命令為我們的Web服務生成所需的請求和響應對象。 如您所見,我已經使用<argline>屬性指定我希望生成的類進入的位置。 由于在構建war文件時運行的常規maven編譯任務將在classes目錄中查找,因此我也將我們的類指定為包含在同一路徑中,以便在war時將它們與我們的Web服務類捆綁在一起被建造。 通過瀏覽此處指定的參數,您可以看到所有可能發出的命令。
當我包含我的apache-cxf maven插件時,我的pom指示錯誤:
生命周期配置未涵蓋插件執行
經過對該問題的研究后,我偶然發現了此處所述的解決方案。因此,要克服此問題,您必須在pom的<build>標記下包含以下代碼段:
盡管我不能給您確切的原因來說明為什么出現該警告,但是應該為您消除該錯誤。 如果您知道確切的原因,請您為我們所有人的利益發表評論。 之后,您只需生成war文件并將其復制到tomcat的webapps目錄即可。 然后,您將可以通過以下路徑訪問Web服務:
http:// localhost:8080 / ws-bindings / addws
我將tomcat托管在其上的端口是8080,而ws-bindings是我的war文件的名稱。
最后,讓我們看看如何生成服務所需的客戶端存根,然后編寫一個小型客戶端來測試我們的Web服務。
- 一個簡單的測試客戶即可測試我們的服務
我們將再次使用apache-cxf maven插件通過wsdl2java命令生成客戶端存根。 請注意,首先我們需要從托管我們的Web服務的路徑獲取wsdl。 它將位于;
http://localhost:8080/ws-bindings/addws?wsdl然后,我將內容復制到單獨的xml文件中,并將其保存在我創建的用于生成客戶端存根的單獨的maven項目的資源目錄下。 然后,您所需要做的就是添加生成pom中的存根所需的配置,如下所示;
<plugin><groupId>org.apache.cxf</groupId><artifactId>cxf-codegen-plugin</artifactId><version>2.0.9</version><executions><execution><id>generate-sources</id><phase>generate-sources</phase><configuration><wsdlOptions><wsdlOption><wsdl>${project.basedir}/src/main/resources/AddService.wsdl</wsdl></wsdlOption></wsdlOptions></configuration><goals><goal>wsdl2java</goal></goals></execution></executions></plugin>這將為您生成測試Web服務所需的存根。 最后,讓我們編寫一個客戶端以使用生成的存根訪問我們的Web服務。
import java.net.MalformedURLException; import java.net.URL;import javax.xml.namespace.QName; import javax.xml.ws.Service;import com.wsbindings.AddService;public class DocWrapperClient {public static void main(String[] args) throws MalformedURLException {URL wsdlLocation = new URL("http://localhost:8080/ws-bindings/addws?wsdl"); QName qName = new QName("http://wsbindings.com/", "AddServiceImplService"); Service service = null; service = Service.create(wsdlLocation, qName); AddService ser = service.getPort(AddService.class);System.out.println(ser.addIntegers(1, 1));} } 就是這樣,我希望您覺得內容有用。 您可以通過從此處下載與服務器相關的maven項目和從此處下載客戶端存根生成maven項目來查看示例。
翻譯自: https://www.javacodegeeks.com/2013/04/let-us-write-a-document-style-web-service.html
c++編寫web服務
總結
以上是生活随笔為你收集整理的c++编写web服务_让我们编写一个文档样式的Web服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (linux ftp 目录)
- 下一篇: 税局备案都需要什么(税局备案)