日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++编写web服务_让我们编写一个文档样式的Web服务

發(fā)布時(shí)間:2023/12/3 c/c++ 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++编写web服务_让我们编写一个文档样式的Web服务 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

c++編寫web服務(wù)

您可能知道,我們可以使用四種主要的Web服務(wù)樣式。 它們?nèi)缦?#xff1a;

  • 文件/文學(xué)
  • 包裝的文件/文學(xué)
  • RPC /編碼
  • RPC /文字

當(dāng)然,現(xiàn)在不建議使用RPC /編碼樣式。 如果您有興趣,可以在此處找到這篇非常全面的文章,以了解不同的Web服務(wù)樣式及其優(yōu)點(diǎn)。

今天,我們將看到如何編寫一種Web服務(wù)的Document / Literal包裝器。 該職位的議程如下:

  • 根據(jù)包裝的文檔/文字編寫一個(gè)簡單的Web服務(wù)
  • 如何在tomcat Web容器上托管簡單的Web服務(wù)
  • 一個(gè)簡單的測試客戶即可測試我們的服務(wù)

因此,讓我們開始旅程:

  • 根據(jù)包裝的文檔/文字編寫一個(gè)簡單的Web服務(wù)
package com.wsbindings;import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import javax.jws.soap.SOAPBinding.ParameterStyle; import javax.jws.soap.SOAPBinding.Style; import javax.jws.soap.SOAPBinding.Use;@WebService @SOAPBinding(style = Style.DOCUMENT, use = Use.LITERAL, parameterStyle = ParameterStyle.WRAPPED) public interface AddService {@WebMethodpublic int addIntegers(@WebParam(name = "intOne") int paramOne,@WebParam(name = "intTwo") int paramTwo); }

這是我們的基本W(wǎng)eb服務(wù)。 這是我們服務(wù)的基本接口。 如您所見,我們首先使用@ javax.jws.WebService對其進(jìn)行注釋,以指示其將要編寫的Web服務(wù)。 接下來是我們定義SOAPBinding的有趣部分。 在這里,我們聲明我們要編寫一個(gè)DOCUMENT風(fēng)格的Web服務(wù),該服務(wù)是LITERAL風(fēng)格,并且是WRAPPED風(fēng)格。 這里要注意的一件事是,Soap Binding批注中指定的所有三個(gè)屬性值都是默認(rèn)值,因此您可以不必在此處明確聲明而無需使用它們。 我這樣做是為了使本文清晰。

繼續(xù),讓我們看看該特定接口的實(shí)現(xiàn)如何:

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;}}

同樣,此服務(wù)的功能也沒有什么特別之處。 只需將傳入的兩個(gè)數(shù)字相加,然后發(fā)回相加結(jié)果。 請注意,在這里我們再次必須使用@WebService批注對實(shí)現(xiàn)類進(jìn)行批注。 現(xiàn)在,我們已經(jīng)完成了編寫Web服務(wù)合同和實(shí)現(xiàn)的初始部分,讓我們看看如何將其托管在tomcat Web容器上。

  • 如何在tomcat Web容器上托管簡單的Web服務(wù)

如您所知,默認(rèn)情況下,tomcat不帶有JAX-WS實(shí)現(xiàn),這與典型的應(yīng)用程序服務(wù)器(例如JBoss,Glassfish)不同。 因此,要使其正常工作,您需要獲得JAX-WS規(guī)范的實(shí)現(xiàn)。 在這種情況下,我們將使用Metro 。 您可以將jar文件從下載文件復(fù)制到WEB-INF / lib目錄,也可以使用Maven為您完成,這就是我將在本文中做的。 因此,為了獲得與Metro實(shí)施相關(guān)的require jar文件,我將以下依賴項(xiàng)添加到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工件添加了一個(gè)排除項(xiàng),因?yàn)槲倚枰氖潜葟膫鬟f依賴中繪制的版本更高的版本。 否則,您將獲得以下異常。

無法初始化類javax.xml.stream.XMLStreamException:編碼UTF-8的底層流和writeStartDocument()方法utf-8的輸入?yún)?shù)不匹配。

為了解決此問題,我需要向pom添加以下依賴項(xiàng):

<dependency><groupId>com.sun.xml.stream</groupId><artifactId>sjsxp</artifactId><version>1.0.1</version></dependency>

多虧了該線程,我才能夠找到此解決方案。

繼續(xù),我們需要定義一個(gè)特定的xml文件,該文件應(yīng)位于名為sun-jaxws.xml的WEB-INF目錄下 。 該XML指定我們?nèi)绾卧L問我們的Web服務(wù)以及在何處找到實(shí)現(xiàn)類。 讓我們看一下該文件的內(nèi)容:

<?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服務(wù)實(shí)現(xiàn)類所駐留的包以及有關(guān)如何訪問特定Web服務(wù)的URL模式。 我們要做的最后一件事是將以下內(nèi)容添加到web.xml中,以便成功托管我們的Web服務(wù):

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

注意,我們必須定義一個(gè)上下文偵聽器和一個(gè)Servlet類,它們將處理我們的Web服務(wù)調(diào)用。 如果查看WSServletContextListner的源代碼,則會(huì)看到它從WEB-INF目錄讀取sun-jaxws.xml文件,并相應(yīng)地為Web服務(wù)上下文創(chuàng)建類加載器。 關(guān)于文檔樣式Web服務(wù)的一件事是,您需要為請求和響應(yīng)生成一些代碼。 如果不這樣做,則會(huì)出現(xiàn)以下錯(cuò)誤并顯示以下消息:

您是否運(yùn)行過APT來生成它們?

您可以使用JDK安裝隨附的wsgen工具生成所需的類。 您還可以使用Apache-CXF為您生成這些類。 我們將通過提供給我們的apache-cxf maven插件來使用后一種方法。 將以下內(nèi)容添加到您的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服務(wù)生成所需的請求和響應(yīng)對象。 如您所見,我已經(jīng)使用<argline>屬性指定我希望生成的類進(jìn)入的位置。 由于在構(gòu)建war文件時(shí)運(yùn)行的常規(guī)maven編譯任務(wù)將在classes目錄中查找,因此我也將我們的類指定為包含在同一路徑中,以便在war時(shí)將它們與我們的Web服務(wù)類捆綁在一起被建造。 通過瀏覽此處指定的參數(shù),您可以看到所有可能發(fā)出的命令。

當(dāng)我包含我的apache-cxf maven插件時(shí),我的pom指示錯(cuò)誤:
生命周期配置未涵蓋插件執(zhí)行
經(jīng)過對該問題的研究后,我偶然發(fā)現(xiàn)了此處所述的解決方案。因此,要克服此問題,您必須在pom的<build>標(biāo)記下包含以下代碼段:

<pluginManagement><plugins><!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself. --><plugin><groupId>org.eclipse.m2e</groupId><artifactId>lifecycle-mapping</artifactId><version>1.0.0</version><configuration><lifecycleMappingMetadata><pluginExecutions><pluginExecution><pluginExecutionFilter><groupId>org.apache.cxf</groupId><artifactId>cxf-codegen-plugin</artifactId><version>2.0.9</version><goals><goal>test-compile</goal><goal>compile</goal></goals></pluginExecutionFilter><action><execute /></action></pluginExecution></pluginExecutions></lifecycleMappingMetadata></configuration></plugin></plugins></pluginManagement>

盡管我不能給您確切的原因來說明為什么出現(xiàn)該警告,但是應(yīng)該為您消除該錯(cuò)誤。 如果您知道確切的原因,請您為我們所有人的利益發(fā)表評(píng)論。 之后,您只需生成war文件并將其復(fù)制到tomcat的webapps目錄即可。 然后,您將可以通過以下路徑訪問Web服務(wù):
http:// localhost:8080 / ws-bindings / addws
我將tomcat托管在其上的端口是8080,而ws-bindings是我的war文件的名稱。

最后,讓我們看看如何生成服務(wù)所需的客戶端存根,然后編寫一個(gè)小型客戶端來測試我們的Web服務(wù)。

  • 一個(gè)簡單的測試客戶即可測試我們的服務(wù)

我們將再次使用apache-cxf maven插件通過wsdl2java命令生成客戶端存根。 請注意,首先我們需要從托管我們的Web服務(wù)的路徑獲取wsdl。 它將位于;

http://localhost:8080/ws-bindings/addws?wsdl

然后,我將內(nèi)容復(fù)制到單獨(dú)的xml文件中,并將其保存在我創(chuàng)建的用于生成客戶端存根的單獨(dú)的maven項(xiàng)目的資源目錄下。 然后,您所需要做的就是添加生成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服務(wù)所需的存根。 最后,讓我們編寫一個(gè)客戶端以使用生成的存根訪問我們的Web服務(wù)。

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));} }

就是這樣,我希望您覺得內(nèi)容有用。 您可以通過從此處下載與服務(wù)器相關(guān)的maven項(xiàng)目和從此處下載客戶端存根生成maven項(xiàng)目來查看示例。

參考: 讓我們從JCG合作伙伴 Dinuka Arseculeratne的My Journey Through IT博客上編寫文檔樣式的Web服務(wù) 。

翻譯自: https://www.javacodegeeks.com/2013/04/let-us-write-a-document-style-web-service.html

c++編寫web服務(wù)

總結(jié)

以上是生活随笔為你收集整理的c++编写web服务_让我们编写一个文档样式的Web服务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。