帶有Spring和Maven教程的JAX–WS

Spring框架通過JAX-WS提供對Web服務的遠程支持,實際上,如Spring 參考文檔中所述 ,有三種將Spring POJO服務公開為JAX-WS Web服務的方式:

  1. 公開基于Servlet的Web服務(適用于Java EE 5環境)
  2. 導出獨立的Web服務(適用于使用Sun的JDK 1.6內置JAX–WS提供程序的情況)
  3. 使用JAX-WS RI的Spring支持導出Web服務(類似于獨立方法,但是這次是在Servlet環境中。適用于非Java EE環境,例如Tomcat ,將JAX-WS RI嵌入為Web應用程序的一部分)

選擇上述三種方法之一主要取決于您的執行環境。 話雖如此,我們將向您展示如何使用上述所有方法來設置和公開一個簡單的Spring服務。

我們首選的開發環境是Eclipse ,因此,必須先安裝具有Maven支持的Eclipse 。 用于Eclipse的Maven插件的安裝不在本教程的討論范圍內,因此將不予討論。 但是,您將需要以下組件:

  1. 從這里 蝕
  2. 從這里開始 , Eclipse的 Maven插件

在本教程中,我們將使用Eclipse Galileo,“ m2eclipse” Maven Integration for Eclipse插件版本0.10.0和Spring版本3.0.1。

讓我們開始,

  1. 創建一個新的Maven項目,轉到File? 項目? Maven? Maven項目
  2. 在向導的“選擇項目名稱和位置”頁面中,確保未選中 “創建簡單項目(跳過原型選擇)”選項,單擊“下一步”以繼續使用默認值
  3. 在向導的“選擇原型”頁面中,在“目錄”下拉列表中選擇“ Nexus Indexer”,并在刷新原型選擇區域后,從“ org.codehaus.mojo”中選擇“ webapp-javaee6”原型。原型”。 您可以使用“過濾器”文本框來縮小搜索結果范圍。 點擊“下一步”繼續
  4. 在向導的“輸入工件ID”頁面中,您可以定義項目的名稱和主程序包。 我們將“ Group Id”變量設置為“ com.javacodegeeks”,并將“ Artifact Id”變量設置為“ jaxwsspring”。 前面提到的選擇組成了主項目包“ com.javacodegeeks.jaxwsspring”和項目名“ jaxwsspring”。 點擊“完成”退出向導并創建您的項目

讓我們回顧一下有關Maven Web項目結構的一些事情

  1. / src / main / java文件夾包含應用程序動態內容的源文件
  2. / src / test / java文件夾包含用于單元測試的所有源文件
  3. / src / main / webapp文件夾包含用于創建有效的Web應用程序的基本文件,例如“ web.xml”
  4. / target文件夾包含已編譯和打包的可交付成果
  5. “ pom.xml”是項目對象模型(POM)文件。 包含所有項目相關配置的單個文件。

這里要注意的一件事是,我們選擇使用兼容Java EE6的 Maven項目原型。 我們的選擇是有目的的,以便易于演示上述所有可用方法。 不過,即使您使用其他環境(例如獨立的Servlet環境(例如Apache Tomcat)或Java EE 5兼容的應用程序服務器(例如JBoss Application Server)),也可以按照本教程將Spring服務作為JAX-WS服務公開。

為了在運行時正確使用Spring ,我們必須向Web應用程序提供所有必需的庫。 打開“ pom.xml”的圖形編輯器并執行以下更改:

  1. 在POM編輯器的“概述”頁面上的“屬性”部分中找到并執行以下更改:
  • 創建一個名稱為org.springframework.version且值為3.0.1.RELEASE的新屬性
  • 導航到POM編輯器的“ Dependencies”頁面,并創建以下依賴關系(您應在該頁面的“ Dependency Details”部分的“ GroupId”,“ Artifact Id”和“ Version”字段中進行填充):
    • 組ID: org.springframework工件ID: spring-web版本: $ {org.springframework.version}

    如您所見, Maven以聲明方式管理庫依賴關系。 創建本地存儲庫(默認情況下,位于{user_home} /。m2文件夾下),所有必需的庫都從公共存儲庫下載并放置在該庫中。 此外,庫內的依賴關系會自動解決和處理。

    下一步是為Web應用程序提供掛鉤,以便在啟動時加載Spring上下文。

    在/ src / main / webapp文件夾下創建一個“ WEB-INF /web.xml”文件,并添加以下內容:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><display-name>jaxwsspring</display-name><session-config><session-timeout>30</session-timeout></session-config><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list>
    </web-app>

    現在讓我們創建將驅動Spring容器的applicationContext.xml文件。 在/ src / main / webapp / WEB-INF目錄下創建文件。 下面是一個示例“ applicationContext.xml”:

    <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:task="http://www.springframework.org/schema/task"xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsdhttp://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"><context:component-scan base-package="com.javacodegeeks.jaxwsspring" /></beans>

    這里要注意的事情:

    1. 將context:component-scan元素的base-package屬性更改為項目的基本包,以便掃描Spring組件

    現在讓我們創建一個“問候” Spring服務。 在主程序包下創建一個名為“服務”的子程序包,并將“ GreetingService”類放在此處。 下面是一個示例“問候”服務:

    package com.javacodegeeks.jaxwsspring.services;import org.springframework.stereotype.Service;@Service("greetingService")
    public class GreetingService {public String sayHello() {return "Hello from Greeting Service";}}

    JAX–WS需要使用專用的端點類。 如果需要導出現有服務,則包裝器類是最簡單的JAX–WS兼容方法。 現在創建一個“問候”端點類。 在主程序包下創建一個名為“ endpoints”的子程序包,并將“ GreetingServiceEndpoint”類放在此處。 下面是一個示例“問候”端點類:

    package com.javacodegeeks.jaxwsspring.endpoints;import javax.jws.WebMethod;
    import javax.jws.WebService;import org.springframework.beans.factory.annotation.Autowired;import com.javacodegeeks.jaxwsspring.services.GreetingService;@WebService(serviceName="GreetingService")
    public class GreetingServiceEndpoint {@Autowiredprivate GreetingService greetingService;@WebMethodpublic String sayHello() {return greetingService.sayHello();}}

    如您所見,這是一個與JAX–WS兼容的“ greeting”服務實現,僅委托給“ GreetingService”實現。 這是將在JAX-WS引擎中注冊的類。 對于Java EE 5服務器(基于Servlet的Web服務方法),Web服務引擎管理端點類實例的生命周期。 在其他兩種情況下,端點實例是作為Spring Bean本身定義和管理的,因此它們的生命周期將取決于Spring應用程序上下文。

    Spring為JAX-WS Servlet端點實現提供了一個方便的基類-“ SpringBeanAutowiringSupport”。 要將我們的“ GreetingService”公開為基于Servlet的Web服務,我們必須執行以下操作:

    1. 修改我們的“ GreetingServiceEndpoint”類以擴展Spring的“ SpringBeanAutowiringSupport”類。 這樣,將兌現@Autowired批注,Spring的IoC容器將能夠將實際的“ greeting”服務實例注入到我們的終結點類中,以正確地委派調用。
    2. 我們的“ GreetingServiceEndpoint”需要在與Spring上下文相同的Web應用程序中運行,以允許訪問Spring的設施。 在Java EE 5環境中,默認情況下就是這種情況,它使用JAX-WS Servlet端點部署的標準協定。
    3. 端點是在服務器端JAX-WS實現中注冊的類。 對于Java EE 5服務器,可以簡單地將其定義為“ web.xml”中的Servlet ,服務器檢測到這是一個JAX–WS端點,并做出相應的反應。 Servlet名稱通常需要與指定的Web服務服務名稱匹配。

    請牢記以上幾點,如下所示更改端點類:

    package com.javacodegeeks.jaxwsspring.endpoints;import javax.jws.WebMethod;
    import javax.jws.WebService;import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.context.support.SpringBeanAutowiringSupport;import com.javacodegeeks.jaxwsspring.services.GreetingService;@WebService(serviceName="GreetingService")
    public class GreetingServiceEndpoint extends SpringBeanAutowiringSupport {@Autowiredprivate GreetingService greetingService;@WebMethodpublic String sayHello() {return greetingService.sayHello();}}

    最后,將以下Servlet聲明添加到“ web.xml”中:

    <servlet>  <servlet-name>GreetingService</servlet-name>  <servlet-class>  com.javacodegeeks.jaxwsspring.endpoints.GreetingServiceEndpoint</servlet-class>  
    </servlet>  <servlet-mapping>  <servlet-name>GreetingService</servlet-name>  <url-pattern>/GreetingService</url-pattern>  
    </servlet-mapping>

    要構建應用程序,請右鍵單擊您的項目? 運行為? Maven包

    要部署Web應用程序,只需將“ .war”文件從“ target”目錄復制到Java EE 5服務器Web應用程序部署文件夾。 在本教程中,我們將Web應用程序部署到JBoss 5.1.0 Application Server。

    要啟動該應用程序,請將瀏覽器指向以下地址

    http:// localhost:8080 / jaxwsspring /

    如果一切順利,您應該會看到顯示以下內容的主網頁:

    “你好,世界!”

    我們的網絡服務地址應位于:

    http:// localhost:8080 / jaxwsspring / GreetingService

    如果將瀏覽器指向以下位置,則可以查看我們的Web服務WSDL:

    http:// localhost:8080 / jaxwsspring / GreetingService?wsdl

    結果應如下所示:

    <definitions name="GreetingService" targetNamespace="http://endpoints.jaxwsspring.javacodegeeks.com/"><types><xs:schema targetNamespace="http://endpoints.jaxwsspring.javacodegeeks.com/" version="1.0"><xs:element name="sayHello" type="tns:sayHello"/><xs:element name="sayHelloResponse" type="tns:sayHelloResponse"/><xs:complexType name="sayHello"><xs:sequence/></xs:complexType><xs:complexType name="sayHelloResponse"><xs:sequence><xs:element minOccurs="0" name="return" type="xs:string"/></xs:sequence></xs:complexType></xs:schema></types><message name="GreetingServiceEndpoint_sayHello"><part element="tns:sayHello" name="sayHello"/></message><message name="GreetingServiceEndpoint_sayHelloResponse"><part element="tns:sayHelloResponse" name="sayHelloResponse"/></message><portType name="GreetingServiceEndpoint"><operation name="sayHello" parameterOrder="sayHello"><input message="tns:GreetingServiceEndpoint_sayHello"/><output message="tns:GreetingServiceEndpoint_sayHelloResponse"/></operation></portType><binding name="GreetingServiceEndpointBinding" type="tns:GreetingServiceEndpoint"><soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/><operation name="sayHello"><soap:operation soapAction=""/><input><soap:body use="literal"/></input><output><soap:body use="literal"/></output></operation></binding><service name="GreetingService"><port binding="tns:GreetingServiceEndpointBinding" name="GreetingServiceEndpointPort"><soap:address location="http://127.0.0.1:8080/jaxwsspring/GreetingService"/></port></service>
    </definitions>

    現在我們有了Web服務定義,我們可以使用我們最喜歡的SOAP客戶端(生成或實現一個)來調用“問候” Web服務的操作。 訪問Web服務不在本教程的討論范圍內,因此我們將不再對其進行討論。 不過,我們將提供一個示例請求–使用我們首選的Web服務測試工具soapUI調用“ GreetingService”的“ sayHello”操作時的響應對話框

    soapUI工具發布的SOAP請求:

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:end="http://endpoints.jaxwsspring.javacodegeeks.com/"><soapenv:Header/><soapenv:Body><end:sayHello/></soapenv:Body>
    </soapenv:Envelope>

    從“ greeting” Web服務接收到的相關SOAP響應:

    <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"><env:Header/><env:Body><ns2:sayHelloResponse xmlns:ns2="http://endpoints.jaxwsspring.javacodegeeks.com/"><return>Hello from Greeting Service</return></ns2:sayHelloResponse></env:Body>
    </env:Envelope>

    如上所述,Sun的JDK 1.6附帶的內置JAX-WS提供程序也支持使用JDK 1.6附帶的內置HTTP服務器公開Web服務。 Spring的“ SimpleJaxWsServiceExporter”在Spring應用程序上下文中檢測所有帶@WebService注釋的bean,并通過默認的JAX–WS服務器(JDK 1.6 HTTP服務器)將其導出。

    在這種情況下,終結點實例被定義和管理為Spring bean本身。 它們將在JAX-WS引擎中注冊,但是它們的生命周期將取決于Spring應用程序上下文。 這意味著可以將Spring功能(例如顯式依賴項注入)應用于終結點實例。 當然,通過@Autowired注解驅動的注入也將起作用。

    要利用這種方法,我們要做的就是通過使用@Service注釋對端點類聲明為Spring bean。 另外,我們必須在應用程序上下文文件中添加“ SimpleJaxWsServiceExporter” bean聲明,如下所示:

    package com.javacodegeeks.jaxwsspring.endpoints;import javax.jws.WebMethod;
    import javax.jws.WebService;import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;import com.javacodegeeks.jaxwsspring.services.GreetingService;@Service("greetingServiceEndpoint")
    @WebService(serviceName="GreetingService")
    public class GreetingServiceEndpoint {@Autowiredprivate GreetingService greetingService;@WebMethodpublic String sayHello() {return greetingService.sayHello();}}

    這里要注意的事情:

    1. GreetingServiceEndpoint可以從Spring的“ SpringBeanAutowiringSupport”派生而來,但不必這樣做,因為該端點是完全由Spring管理的bean
    <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:task="http://www.springframework.org/schema/task"xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsdhttp://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"><context:component-scan base-package="com.javacodegeeks.jaxwsspring" /><bean class="org.springframework.remoting.jaxws.SimpleJaxWsServiceExporter"><property name="baseAddress" value="http://localhost:9999/" /></bean></beans>

    這里要注意的事情:

    1. 將context:component-scan元素的base-package屬性更改為項目的基本包,以便掃描Spring組件
    2. 您可以更改“ SimpleJaxWsServiceExporter”的“ baseAddress”屬性以適合您的需求。 “ baseAddress”是將導出所有檢測到的Web服務的地址。 默認的“ baseAddress”是“ http:// localhost:8080 /”

    要構建應用程序,請右鍵單擊您的項目? 運行為? Maven包

    為了測試特定的方法,我們將將Web應用程序部署到Apache Tomcat 6服務器。 不要忘記,我們將利用Sun的JDK 1.6構建于JAX-WS的提供程序中。 即使我們在Servlet容器中進行操作。 在這種特定情況下,我們僅將Servlet容器用于啟動Spring應用程序。 另外,您可以實現Main類并以編程方式啟動Spring應用程序。

    要啟動該應用程序,請將瀏覽器指向以下地址

    http:// localhost:8080 / jaxwsspring /

    如果一切順利,您應該會看到顯示以下內容的主網頁:

    “你好,世界!”

    我們的網絡服務地址應位于:

    http:// localhost:9999 / GreetingService

    如果將瀏覽器指向以下位置,則可以查看我們的Web服務WSDL:

    http:// localhost:9999 / GreetingService?wsdl

    我們可以再次使用Web服務定義來生成和/或實現SOAP客戶端,以調用“問候” Web服務的操作。

    作為GlassFish項目的一部分開發的Sun的JAX–WS RI,將Spring支持作為其JAX–WS Commons項目的一部分。 這允許將JAX-WS端點定義為Spring管理的Bean,類似于上一節中討論的獨立模式-但這次是在Servlet環境中。 請注意,這在Java EE 5環境中不可移植。 它主要用于Tomcat等非EE環境,并將JAX–WS RI嵌入為Web應用程序的一部分。

    與導出基于Servlet的端點的標準樣式的不同之處在于,這里將由Spring管理端點實例本身的生命周期,并且在“ web.xml”中僅定義一個JAX-WS Servlet 。 使用標準的Java EE 5樣式(如上所示),每個服務端點都有一個Servlet定義,每個端點通常都委派給Spring Bean。

    最后一種方法是特定于Spring 2.0的 ,因此在更改任何代碼之前,我們應該稍微更改項目配置。 特別是,我們必須刪除Spring 3庫的依賴關系,并向jaxws-spring庫添加一個新的依賴項。 打開“ pom.xml”的圖形編輯器并執行以下更改:

    1. 在POM編輯器的“概述”頁面上的“屬性”部分中找到,并刪除名稱為org.springframework.version的屬性(如果存在的話)–如果您從一開始就遵循此教程
    2. 導航到POM編輯器的“ Dependencies”頁面,并創建以下依賴關系(您應在該頁面的“ Dependency Details”部分的“ GroupId”,“ Artifact Id”和“ Version”字段中進行填充):
    • 組ID: org.jvnet.jax-ws-commons.spring工件ID: jaxws-spring版本: 1.8
    1. 自撰寫本文以來, jaxws-spring庫的最新版本( 1.8 )的“ pom”文件中存在依賴項聲明缺陷。 特別是對于jaxb-impl2.1.2版本,不必要的依賴聲明會導致代碼中斷。 要解決此問題,必須為jaxb-impl庫的特定版本配置排除項。 為此,選擇新創建的依賴項,找到編輯器頁面的“排除項”部分,然后如下所示創建排除項:
      • 組ID: com.sun.xml.bind工件ID: jaxb-impl
      1. 另外,為jaxb-impl庫的2.1.6版本創建另一個顯式依賴項,如下所示:
        • 組ID: com.sun.xml.bind工件ID: jaxb-impl版本: 2.1.6
        1. 最后但并非最不重要的一點是,我們必須配置兩個新的存儲庫,以便Maven能夠下載項目依賴項。 導航到POM編輯器的“存儲庫”頁面,并創建以下存儲庫:
          • ID: download.java.net存儲庫1 URL: http//download.java.net/maven/1/布局: 舊版
          • ID: download.java.net存儲庫2 URL: http//download.java.net/maven/2/

          要使用這種方法,我們必須遵循以下步驟:

          找到“ web.xml”文件,并通過定義主要的JAX-WS Servlet以及我們要作為Web服務公開的服務所需的Servlet映射,來對其進行更改; 每個服務一個Servlet映射。 因此,對于我們的特定測試用例,我們應該添加以下聲明:

          <servlet><servlet-name>jaxws-servlet</servlet-name><servlet-class>com.sun.xml.ws.transport.http.servlet.WSSpringServlet</servlet-class></servlet><servlet-mapping><servlet-name>jaxws-servlet</servlet-name><url-pattern>/GreetingService</url-pattern></servlet-mapping>

          更改“ applicationContext.xml”文件,如下所示:

          <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:ws="http://jax-ws.dev.java.net/spring/core"xmlns:wss="http://jax-ws.dev.java.net/spring/servlet"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.0.xsdhttp://jax-ws.dev.java.net/spring/corehttp://jax-ws.dev.java.net/spring/core.xsdhttp://jax-ws.dev.java.net/spring/servlethttp://jax-ws.dev.java.net/spring/servlet.xsd"><wss:binding url="/GreetingService"><wss:service><ws:service bean="#greetingService" /></wss:service></wss:binding><bean id="greetingService" class="com.javacodegeeks.jaxwsspring.services.GreetingService" /></beans>

          這里要注意的事情:

          1. 這種方法是特定于Spring 2.0的 ,因此已創建了與Spring 2.0兼容的“ applicationContext.xml”文件。 請注意,由于@Service注釋在Spring 2.0中不可用,因此我們直接在“ applicationContext.xml”文件中聲明了“問候” Spring服務bean。
          2. wss:binding定義定義將哪些服務公開到URL空間的哪一部分。 在上面的代碼中,它在/ GreetingService URL上部署了“ GreetingService”
          3. ws:service定義實現一個Web服務實例。 最簡單的形式應該配置bean屬性,以便將所有調用委托給指定的Spring bean。 如您所見,使用這種方法我們可以省略創建“端點”類來代理我們的Spring服務。

          最后,我們實現“ GreetingService”,如下所示:

          package com.javacodegeeks.jaxwsspring.services;import javax.jws.WebMethod;
          import javax.jws.WebService;
          import javax.jws.soap.SOAPBinding;
          import javax.jws.soap.SOAPBinding.Style;
          import javax.jws.soap.SOAPBinding.Use;@WebService(serviceName="GreetingService")
          @SOAPBinding(style = Style.RPC, use = Use.LITERAL)
          public class GreetingService {@WebMethodpublic String sayHello() {return "Hello from Greeting Service";}}

          這里要注意的事情:

          1. 如果使用的是“ Style.DOCUMENT ”,則應運行“ wsgen ”工具。 “ Style.RPC ”僅用于演示目的。
          2. @Service批注在Spring 2.0中不可用,因此我們直接在“ applicationContext.xml”文件中聲明

          要構建應用程序,請右鍵單擊您的項目? 運行為? Maven包

          為了測試特定的方法,我們將將Web應用程序部署到Apache Tomcat 6服務器。

          要啟動該應用程序,請將瀏覽器指向以下地址

          http:// localhost:8080 / jaxwsspring /

          如果一切順利,您應該會看到顯示以下內容的主網頁:

          “你好,世界!”

          我們的網絡服務地址應位于:

          http:// localhost:8080 / jaxwsspring / GreetingService

          如果將瀏覽器指向以下位置,則可以查看我們的Web服務WSDL:

          http:// localhost:8080 / jaxwsspring / GreetingService?wsdl

          我們可以再次使用Web服務定義來生成和/或實現SOAP客戶端,以調用“問候” Web服務的操作。

          快樂編碼

          賈斯汀

          相關文章 :
          • GWT 2 Spring 3 JPA 2 Hibernate 3.5教程
          • GWT Spring和Hibernate進入數據網格世界
          • Spring 3 HornetQ 2.1集成教程
          • Spring3 RESTful Web服務
          • GWT 2 Spring 3 JPA 2 Hibernate 3.5教程– Eclipse和Maven 2展示

          翻譯自: https://www.javacodegeeks.com/2010/11/jaxws-with-spring-and-maven-tutorial.html

        本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
        如若轉載,請注明出處:http://www.pswp.cn/news/374846.shtml
        繁體地址,請注明出處:http://hk.pswp.cn/news/374846.shtml
        英文地址,請注明出處:http://en.pswp.cn/news/374846.shtml

        如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

        相關文章

        7-2 然后是幾點 (15 分)

        7-2 然后是幾點 (15 分) 有時候人們用四位數字表示一個時間&#xff0c;比如 1106 表示 11 點零 6 分。現在&#xff0c;你的程序要根據起始時間和流逝的時間計算出終止時間。 讀入兩個數字&#xff0c;第一個數字以這樣的四位數字表示當前時間&#xff0c;第二個數字表示分鐘…

        CXF學習(2) helloworld

        0.新建一個項目取名wsserver. pom.xml 文件如下 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd…

        Hive 接口介紹(Web UI/JDBC)

        Hive 接口介紹&#xff08;Web UI/JDBC&#xff09; 實驗簡介 本次實驗學習 Hive 的兩種接口&#xff1a;Web UI 以及 JDBC。 一、實驗環境說明 1. 環境登錄 無需密碼自動登錄&#xff0c;系統用戶名shiyanlou&#xff0c;密碼shiyanlou 2. 環境介紹 本實驗環境采用帶桌面的Ubu…

        Java最佳實踐– Char到Byte和Byte到Char的轉換

        在使用Java編程語言時&#xff0c;我們將繼續討論與建議的實踐有關的系列文章&#xff0c;我們將討論String性能調優。 特別是&#xff0c;我們將重點介紹使用默認編碼時如何有效地處理字符到字節和字節到字符的轉換。 本文總結了兩種提議的自定義方法與兩種經典方法&#xff0…

        IOS-C文件的創建于初始化函數.void init() write_file()

        //文件初始化 void init(){ FILE * fpNULL; fpfopen("telbook.data", "rb"); int count0; if (fpNULL) //沒有這個文件就把這個文件創建出來 { fpfopen("tellbook.data", "wb"); fwrite(&count, sizeof(count), 1, fp); fclose(…

        7-3 逆序的三位數 (10 分)

        7-3 逆序的三位數 (10 分) 程序每次讀入一個正3位數&#xff0c;然后輸出按位逆序的數字。注意&#xff1a;當輸入的數字含有結尾的0時&#xff0c;輸出不應帶有前導的0。比如輸入700&#xff0c;輸出應該是7。 輸入格式&#xff1a; 每個測試是一個3位的正整數。 輸出格式&a…

        拋棄優啟Grub4dos和PE大多數時間可以這樣用

        拋棄優啟Grub4dos和PE大多數時間可以這樣用 在能夠進入Windows的情況下&#xff0c;Grub4dos和PE大多數時間可以這樣用 http://yunpan.cn/cyuuUtUQMfmGN 提取碼 c2acGrub4dos的出現顛覆了傳統的EZBOOT光盤啟動模式&#xff0c;很多人用grub4dos來實現優盤啟動&#xff0c;同時g…

        Java最佳實踐–隊列之戰和鏈接的ConcurrentHashMap

        在使用Java編程語言時&#xff0c;我們將繼續討論與建議的實踐有關的系列文章&#xff0c;我們將在四個具有相關語義的流行Queue實現類之間進行性能比較。 為了使事情變得更現實&#xff0c;我們將在多線程環境下進行測試&#xff0c;以討論和演示如何將ArrayBlockingQueue &am…

        HDU 5652 India and China Origins(二分 + BFS)

        本文鏈接:http://www.cnblogs.com/Ash-ly/p/5398867.html 題意&#xff1a; 中國和印度之間有一片地方&#xff0c;把這片地方抽象化&#xff0c;于是就可以看成一個N * M矩陣&#xff0c;其中黑色的代表高山不能走過去&#xff0c;白色的代表平原&#xff0c;可以通行,人每次可…

        C語言%.2f四舍五入

        #include <stdio.h> int main() {double d 1.199;printf("%.2f", d);return 0; }輸出1.20 如果不想讓其四舍五入可以這樣&#xff1a; #include <stdio.h> #include <math.h> int main() {double d 1.199;printf("%.2f", floor(d * 1…

        關于使用racthet的push.js

        racthet的push是用來跳轉另外一個頁面的效果的。但是必須在服務器的環境下支持。如果想要讓本地html訪問支持的話需要添加 轉載于:https://www.cnblogs.com/djawh/p/4623925.html

        休眠自動提交命令強制MySQL在過多的磁盤I / O中運行

        親愛的大家&#xff0c; 我敢肯定&#xff0c;你們中的許多人都在使用Hibernate和MySQL&#xff0c;我自己在這里和那里都使用它。 通常&#xff0c;編程模型是不錯的&#xff0c;但是普通的JDBC可以快很多已經不是什么秘密了。 在這篇文章中&#xff0c;我想引起您的注意Hibe…

        “應用程序無法正常啟動(oxc000007b)”解決方案

        解決方案1 通過“DirectX修復工具 V3.3 標準版”軟件修復。 備注&#xff1a;經過測試&#xff0c;并未解決本人的問題&#xff0c;但是這個方法可能對游戲中缺失相關.dll&#xff08;動態鏈接庫&#xff09;有幫助。 解決方案2&#xff1a; 該問題的出現不適偶然&#xff0c;主…

        Linux: dev: cmake: CHECK_LIBRARY_EXISTS

        文章目錄 簡介例子源代碼最終調用到的兩個命令如果結果是這里為什么不直接使用rpm查看包呢&#xff1f;需要注意的問題 簡介 https://cmake.org/cmake/help/latest/module/CheckLibraryExists.html 這個方法是在Modules/CheckLibraryExists.cmake文件里定義的一個宏。 最終使用…

        7-15 計算圓周率 (15 分)

        根據下面關系式&#xff0c;求圓周率的值&#xff0c;直到最后一項的值小于給定閾值。 輸入格式&#xff1a; 輸入在一行中給出小于1的閾值。 輸出格式&#xff1a; 在一行中輸出滿足閾值條件的近似圓周率&#xff0c;輸出到小數點后6位。 輸入樣例&#xff1a; 0.01結尾無…

        Struts2的全局結果視圖的配置

        1.在struts.xml中的package標簽內添加<global-results/>標簽&#xff0c;將全局結果加進該標簽內&#xff0c;只適用于當前包下。 <package name"customer" namespace"/customer" extends"struts-default" > <global-results>…

        長大了Java! 提出Java桌面版

        不&#xff0c;這不是另一個“ Java已死”的咆哮。 Java非常活躍。 它是可用的最佳開發和運行時平臺之一。 迄今為止&#xff0c;最穩定的平臺。 那可能只是它最大的禍根。 荒謬&#xff01; 穩定性如何&#xff1f; 你可能會問。 好吧&#xff0c;由于它&#xff0c;您可以看到…

        [算法練習]Excel Sheet Column Title

        題目&#xff1a; Given a positive integer, return its corresponding column title as appear in an Excel sheet. For example: 1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 -> AB 代碼&#xff1a; class Solution { public: string convertToTitle(…

        7-16 求符合給定條件的整數集 (15 分)

        給定不超過6的正整數A&#xff0c;考慮從A開始的連續4個數字。請輸出所有由它們組成的無重復數字的3位數。 輸入格式&#xff1a; 輸入在一行中給出A。 輸出格式&#xff1a; 輸出滿足條件的的3位數&#xff0c;要求從小到大&#xff0c;每行6個整數。整數間以空格分隔&#…

        JUnit學習之hamcrest、testSuite介紹及測試原則

        [轉自] http://huihai.iteye.com/blog/1994270 上一節說了junit的一些基本概念&#xff0c;主要使用assert做一些基本的判斷。但很多時候使用assert做判斷&#xff0c;并不方便&#xff0c;如果要判斷某幾個值是否為true或false&#xff0c;這時使用hamcrest來判斷就會方便許多…