GlassFish 3.1.2充滿了MOXy(EclipseLink JAXB)

我非常高興地宣布, EclipseLink JAXB(MOXy)現在是GlassFish 3.1.2中的JAXB( JSR-222 )提供程序。 我要感謝EclipseLink和GlassFish提交者為實現這一目標付出的??辛勤工作。

在本文中,我將介紹如何利用MOXy創建JAX-WS服務。 在以后的文章中,我將更詳細地介紹更多擴展。

可以從以下鏈接下載GlassFish:

  • http://glassfish.java.net/public/downloadsindex.html



網絡服務(JAX-WS)

對于這篇文章,我們將實現一個簡單的服務,該服務通過ID查找客戶。 由于這只是“ Hello World”類型的示例,因此該服務將始終返回名稱為“ Jane Doe”的客戶。

package blog.jaxws.service;import javax.jws.*;
import blog.jaxws.model.Customer;@WebService
public class FindCustomer {@WebMethodpublic Customer findCustomer(int id) {Customer customer = new Customer();customer.setId(id);customer.setFirstName("Jane");customer.setLastName("Doe");return customer;}}

WEB-INF / sun-jaxws.xml

有多種方法可以將MOXy指定為JAXB提供程序。 我的偏好是使用位于WEB-INF目錄中的sun-jaxws.xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<endpointsxmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"version="2.0"><endpointname='FindCustomer'implementation='blog.jaxws.service.FindCustomer'url-pattern='/FindCustomerService'databinding='eclipselink.jaxb'/>
</endpoints>

模型

當MOXy被指定為JAXB提供程序時,我們可以利用其所有映射擴展。 在此示例中,我們將使用@XmlPath進行基于XPath的映射 。

package blog.jaxws.model;import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.XmlPath;@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder={"firstName", "lastName"})
public class Customer {@XmlAttributeprivate int id;@XmlPath("personal-info/first-name/text()")private String firstName;@XmlPath("personal-info/last-name/text()")private String lastName;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}}

WSDL

以下是為此服務生成的WSDL:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is Metro/2.2-b13 (branches/2.2-6964; 2012-01-09T18:04:18+0000) JAXWS-RI/2.2.6-promoted-b20 JAXWS/2.2 svn-revision#unknown. -->
<!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is Metro/2.2-b13 (branches/2.2-6964; 2012-01-09T18:04:18+0000) JAXWS-RI/2.2.6-promoted-b20 JAXWS/2.2 svn-revision#unknown. -->
<definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://service.jaxws.blog/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://service.jaxws.blog/" name="FindCustomerService"><types><xsd:schema><xsd:import namespace="http://service.jaxws.blog/" schemaLocation="http://www.example.com:8080/Blog-JAXWS2/FindCustomerService?xsd=1"/></xsd:schema></types><message name="findCustomer"><part name="parameters" element="tns:findCustomer"/></message><message name="findCustomerResponse"><part name="parameters" element="tns:findCustomerResponse"/></message><portType name="FindCustomer"><operation name="findCustomer"><input wsam:Action="http://service.jaxws.blog/FindCustomer/findCustomerRequest" message="tns:findCustomer"/><output wsam:Action="http://service.jaxws.blog/FindCustomer/findCustomerResponse" message="tns:findCustomerResponse"/></operation></portType><binding name="FindCustomerPortBinding" type="tns:FindCustomer"><soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/><operation name="findCustomer"><soap:operation soapAction=""/><input><soap:body use="literal"/></input><output><soap:body use="literal"/></output></operation></binding><service name="FindCustomerService"><port name="FindCustomerPort" binding="tns:FindCustomerPortBinding"><soap:address location="http://www.example.com:8080/Blog-JAXWS/FindCustomerService"/></port></service>
</definitions>

XML模式

下面是為該模型生成的WSDL引用的XML模式。 請注意,它如何包含@XmlPath批注中指定的“個人信息”元素。

<?xml version="1.0" encoding="UTF-8"?>
<!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is Metro/2.2-b13 (branches/2.2-6964; 2012-01-09T18:04:18+0000) JAXWS-RI/2.2.6-promoted-b20 JAXWS/2.2 svn-revision#unknown. -->
<xsd:schema xmlns:ns0="http://service.jaxws.blog/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"targetNamespace="http://service.jaxws.blog/"><xsd:complexType name="findCustomerResponse"><xsd:sequence><xsd:element name="return" type="ns0:customer" minOccurs="0" /></xsd:sequence></xsd:complexType><xsd:complexType name="findCustomer"><xsd:sequence><xsd:element name="arg0" type="xsd:int" /></xsd:sequence></xsd:complexType><xsd:complexType name="customer"><xsd:sequence><xsd:element name="personal-info" minOccurs="0"><xsd:complexType><xsd:sequence><xsd:element name="first-name" type="xsd:string"minOccurs="0" /><xsd:element name="last-name" type="xsd:string"minOccurs="0" /></xsd:sequence></xsd:complexType></xsd:element></xsd:sequence><xsd:attribute name="id" type="xsd:int" use="required" /></xsd:complexType><xsd:element name="findCustomerResponse" type="ns0:findCustomerResponse" /><xsd:element name="findCustomer" type="ns0:findCustomer" />
</xsd:schema>

服務請求

以下是對我們服務的要求:

<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Header/><S:Body><ns2:findCustomer xmlns:ns2="http://service.jaxws.blog/"><arg0>123</arg0></ns2:findCustomer></S:Body>
</S:Envelope>

服務回應

響應利用了我們在Customer類上使用的@XmlPath批注,將firstNamelastName屬性映射到XML。

<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns0:findCustomerResponse xmlns:ns0="http://service.jaxws.blog/"><return id="123"><personal-info><first-name>Jane</first-name><last-name>Doe</last-name></personal-info></return></ns0:findCustomerResponse></S:Body>
</S:Envelope>

進一步閱讀

如果您喜歡這篇文章,那么您可能會對以下內容感興趣:

  • EclipseLink MOXy是WebLogic Server 12c中的JAXB提供程序
  • 基于XPath的映射-地理編碼示例
  • 將對象映射到多個XML模式–天氣示例
  • JAX-RS服務中的MOXy的XML元數據
  • JPA實體到XML –雙向關系

參考: GlassFish 3.1.2在我們的JCG合作伙伴 Blaise Doughan的Java XML&JSON Binding博客中充滿了MOXy(EclipseLink JAXB) 。


翻譯自: https://www.javacodegeeks.com/2012/04/glassfish-312-is-full-of-moxy.html

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

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

相關文章

夢斷代碼閱讀筆記03

讀完《夢斷代碼(Dream In Code)》樣書&#xff0c;我感覺心情有點沉重&#xff0c;Chandler項目的結局&#xff0c;它失敗了&#xff0c;它成了眾多失敗軟件項目中的一個。這個結局讓那個我感受到軟件實在是太難了&#xff0c;我覺得當初選這個專業可能到最后只是一個碼農。但是…

Java訪問權限的范圍

二、下面用表格來展示四種修飾符的訪問權限范圍&#xff1a; 同一個類 同一個包 不同包的子類 不同包的非子類 public √ √ √ √ protected √ √ √ 默認(default) √ √ private √ 轉載于:https://www.cnblogs.com/jianxin-lilang/p/6…

JavaFX 2 GameTutorial第2部分

介紹 ?他的是一系列與一個JavaFX 2游戲教程博客條目的第二批。 如果您尚未閱讀第1部分&#xff0c;請參閱JavaFX 2游戲教程的簡介部分。 在第1部分中&#xff0c;我提到了游戲的某些方面以及原型飛船的簡單演示&#xff08;原型由簡單的形狀組成&#xff09;&#xff0c;該飛船…

sqlyog連接mysql教程_如何用SQLyog實現遠程連接MySQL

SQLyog客戶端&#xff0c;用root用戶遠程鏈接MySQL時&#xff0c;提示ldquo;訪問被拒絕rdquo;&#xff0c;在網上搜索了一下原因。原來是MySQL沒有授權其遠程鏈1&#xff0c;SQLyog客戶端&#xff0c;&#xff0c;用root用戶遠程鏈接MySQL時&#xff0c;提示“訪問被拒絕”&…

動態SQL+變量綁定:解決ORA-01704: 字符串文字太長的問題

最近在做一個ESB項目&#xff0c;有一個trigger里面執行動態SQL的時候報錯&#xff1a; ORA-01704: 字符串文字太長 經檢查發現SQL里面有個字段是clob類型&#xff0c;內容長度4009&#xff0c;在oracle里面&#xff0c; 一對引號內的字符長度如果超過4000&#xff0c;就會報OR…

JavaME:Google靜態地圖API

無論您是需要基于位置的應用程序的地圖還是只是出于娛樂目的&#xff0c;都可以使用有史以來最簡單的方法&#xff1a;Google Static Maps API。 在這篇文章中&#xff0c;我們將看到如何從緯度和經度獲得地圖作為圖像。 可以使用Location API獲得緯度和經度&#xff0c;我們將…

在ASP.NET中實現OAuth2.0(一)之了解OAuth

1、什么是OAuth2.0 是一個開放授權標準&#xff0c;允許用戶讓第三方應用訪問該用戶在某一個網站或平臺上的私密資源&#xff08;如照片、視頻、聯系人等&#xff09;&#xff0c;而無須將用戶名和密碼提供給第三方應用 2、OAuth2.0授權模式 授權碼模式&#xff08;authorizati…

mysql日期條件如何應用_MySQL如何使用時間作為判斷條件

背景&#xff1a;在開發過程中&#xff0c;我們經常需要根據時間作為判斷條件來查詢數據&#xff0c;例如&#xff1a;當月&#xff0c;當日&#xff0c;當前小時&#xff0c;幾天內......1. 當月我們只需要使用一個mysql的month(date)函數即可實現。(注意判斷年份)month(date)…

深入探討JS中的數組排序函數sort()和reverse()

最近在研究Javascript發現了其中一些比較靈異的事情。有點讓人感到無語比如&#xff1a; alert(typeof( NaN NaN));//結果為假。 alert(typeof( NaN ! NaN));//結果為真。 嘿嘿&#xff0c;當然這個不是這篇文章要討論的!!開始我們的正文 首先&#xff0c;我們來看一下JS中sor…

帶有謂詞的Java中的功能樣式-第1部分

您一直在聽到將要席卷全球的函數式編程&#xff0c;而您仍然堅持使用普通Java&#xff1f; 不用擔心&#xff0c;因為您已經可以在日常Java中添加一些功能樣式。 此外&#xff0c;它很有趣&#xff0c;可以節省許多代碼行并減少錯誤。 什么是謂詞&#xff1f; 實際上&#xff…

寶塔添加多占點_寶塔面板啟用WordPress多站點子域名、子目錄

其實在很早以前&#xff0c;陌小雨就聽說了 wordpress 的多站點功能&#xff0c;不過因為不清楚&#xff0c;所以懶得折騰&#xff0c;這不這幾天閑著蛋疼&#xff0c;好好研究了下這玩意&#xff0c;用起來的感覺還是相當不錯的&#xff0c;總結起來就是如果你準備開始用 word…

centos 6.5下安裝文件上傳下載服務

centos 6.5下安裝文件上傳下載服務 由于每次在CentOS中要下載一些配置文件到物理機&#xff0c;和上傳一些文件到服務器&#xff0c;導致來回的開啟ftp軟件有點麻煩&#xff0c;這里我們可以使用文件上傳下載服務&#xff0c;來解決上傳和下載的問題。 1.登錄服務器 2.執行命令…

Jenkins 入門系列--jenkins 介紹

第一章 Jenkins是什么&#xff1f; Jenkins 是一個可擴展的持續集成引擎。 主要用于&#xff1a; l 持續、自動地構建/測試軟件項目。 l 監控一些定時執行的任務。Jenkins擁有的特性包括&#xff1a; l 易于安裝-只要把jenkins.war部署到servlet容器&#xff0c;不需要數據庫支…

在方法參數上使用final關鍵字

經過一些自己的混淆&#xff0c;最終博客方法的具體含義&#xff08;最終聲明的方法參數&#xff09;將對此博客條目進行澄清。 至少可以將方法參數上的final關鍵字視為Java編譯器的指示符&#xff0c;表明該參數不能重新分配給另一個引用。 Java參數處理始終是“按值調用” &a…

PHP MySQLi 增刪改查

最近幾天&#xff0c;我們一直在學習利用MySQLi訪問數據庫并對其中的數據進行操作。今天給大家展現一個完整的例子&#xff0c;我們來制作一個新聞發布系統&#xff0c;利用MySQLi來操作數據庫&#xff0c;實現對新聞的添加、修改、刪除、查詢等基本功能。&#xff08;以下代碼…

20162303《程序設計與數據結構》第一周學習總結

學號 2016-2017-2 《程序設計與數據結構》第1周學習總結 教材學習內容總結 本周學習了基本的JAVA知識&#xff0c;雖然比較基礎&#xff0c;但是在實際過程中還是出現了許許多多的問題&#xff0c;代碼一遍遍的敲錯&#xff0c;又一遍遍的修改&#xff0c;剛開始甚至不會切換模…

Java EE與NoSQL的未來

自一段時間以來&#xff0c;我一直在關注NoSQL的近期發展勢頭&#xff0c;似乎這個流行語也引起了企業Java界的某種關注。 即EclipseLink 2.4開始支持MongoDB和Oracle NoSQL 。 將EclipseLink作為JPA參考實現&#xff0c;您可能想知道這對Java EE 7意味著什么。這里簡短說明&am…

【C/C++開發】C語言實現函數可變參數

函數原型: int printf(const char *format[,argument]...) 返 回 值: 成功則返回實際輸出的字符數&#xff0c;失敗返回-1. 函數說明: 在printf()函數中&#xff0c;format后面的參數個數不確定&#xff0c;且類型也不確定&#xff0c;這些參數都存放在棧內.調用…

java postgresql json_java – 將PostgreSQL JSON列映射到Hibernate值類...

See PgJDBC bug #265.PostgreSQL對數據類型轉換過于嚴格,非常嚴格.它不會隱式地將文本轉換為類似文本的值,例如xml和json.解決此問題的嚴格正確方法是編寫使用JDBC setObject方法的自定義Hibernate映射類型.這可能有點麻煩,所以你可能只想通過創建一個較弱的強制轉換來使Postgr…

面向接口編程詳解(三)——模式研究

通過前面兩篇&#xff0c;我想各位朋友對“面向接口編程”的思想有了一定認識&#xff0c;并通過第二篇的例子&#xff0c;獲得了一定的直觀印象。但是&#xff0c;第二篇中的例子旨在展示面向接口編程的實現方法&#xff0c;比較簡單&#xff0c;不能體現出面向接口編程的優勢…