基于JAX-WS的RESTful web服务返回通过JAXB注解生成的xml文档

基于JAX-WS编写的RESTful web服务,返回xml文档。这个xml文档可以基于JAXB注解的形式来生成,简化xml的生成。

为了使用依赖的库,可以在maven工程的pom.xml文件中增加如下依赖:

<dependency><groupId>jakarta.xml.ws</groupId><artifactId>jakarta.xml.ws-api</artifactId><version>4.0.0</version>
</dependency>
<dependency><groupId>com.sun.xml.ws</groupId><artifactId>jaxws-rt</artifactId><version>4.0.0</version>        
</dependency>

例如,下面RegisterResponse 这个类使用了JAXB的注解:

package com.thb.server.register;import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;@XmlRootElement(name = "response")
public class RegisterResponse {@XmlElement(name = "flag")private int functionCode;@XmlElement(name = "body")private String enterpriseId;public RegisterResponse() {}public RegisterResponse(int functionCode, String enterpriseId) {this.functionCode = functionCode;this.enterpriseId = enterpriseId;}
}

对应生成的xml文档的形式:

<response><flag>1</flag><body>20012</body>
</response>

下面是服务端完整的示例代码:

package com.thb.server.register;import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;import jakarta.xml.bind.JAXBContext;
import jakarta.xml.bind.JAXBException;
import jakarta.xml.bind.Marshaller;
import jakarta.xml.ws.BindingType;
import jakarta.xml.ws.Provider;
import jakarta.xml.ws.WebServiceProvider;
import jakarta.xml.ws.http.HTTPBinding;
import jakarta.xml.ws.http.HTTPException;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;@WebServiceProvider
@BindingType(value=HTTPBinding.HTTP_BINDING)
public class Register implements Provider<Source> {public Source invoke(Source source) {try {return createSource();} catch(Exception e) {e.printStackTrace();throw new HTTPException(500);}}private Source createSource() throws JAXBException {JAXBContext context = JAXBContext.newInstance(RegisterResponse.class);Marshaller marshaller = context.createMarshaller();ByteArrayOutputStream  outputStream = new ByteArrayOutputStream();marshaller.marshal(new RegisterResponse(1, "20012"), outputStream);byte[] bytes = outputStream.toByteArray();ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes);Source source = new StreamSource(inputStream);return source;}}
package com.thb.server.register;import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;@XmlRootElement(name = "response")
public class RegisterResponse {@XmlElement(name = "flag")private int functionCode;@XmlElement(name = "body")private String enterpriseId;public RegisterResponse() {}public RegisterResponse(int functionCode, String enterpriseId) {this.functionCode = functionCode;this.enterpriseId = enterpriseId;}
}

部署的web服务的web.xml文件:

<?xml version="1.0" encoding="UTF-8"?><web-app version="6.0" xmlns="https://jakarta.ee/xml/ns/jakartaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"><description>power-restful</description><display-name>power-restful</display-name><listener><listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class></listener><servlet><description>The JAX-WS dispatcher servlet</description><display-name>dispatcher</display-name><servlet-name>dispatcher</servlet-name><servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/register/*</url-pattern></servlet-mapping><session-config><session-timeout>60</session-timeout></session-config>
</web-app>

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="restful-register"implementation="com.thb.server.register.Register"url-pattern="/register/*" />
</endpoints>

部署到Tomcat容器中该web应用的目录布局:

D:\APACHE-TOMCAT-10.1.13\WEBAPPS\POWER-RESTFUL
├─META-INF
│      MANIFEST.MF
│      war-tracker
│      
└─WEB-INF│  sun-jaxws.xml│  web.xml│  ├─classes│  └─com│      └─thb│          └─server│              └─register│                      Register.class│                      RegisterResponse.class│                      └─libangus-activation-1.0.0.jarangus-mail-1.0.0.jarFastInfoset-2.1.0.jargmbal-api-only-4.0.3.jarha-api-3.1.13.jarjakarta.activation-api-2.1.0.jarjakarta.annotation-api-2.1.1.jarjakarta.mail-api-2.1.0.jarjakarta.xml.bind-api-4.0.0.jarjakarta.xml.soap-api-3.0.0.jarjakarta.xml.ws-api-4.0.0.jarjaxb-core-4.0.0.jarjaxb-impl-4.0.0.jarjaxws-rt-4.0.0.jarlog4j-api-2.20.0.jarlog4j-core-2.20.0.jarmanagement-api-3.2.3.jarmimepull-1.10.0.jarsaaj-impl-3.0.0.jarstax-ex-2.1.0.jarstax2-api-4.2.1.jarstreambuffer-2.1.0.jarwoodstox-core-6.2.8.jar

在浏览器中访问该web服务:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/185849.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023年最新十大地推拉新接单平台,都是一手单 官签渠道

2023年做拉新推广的地推人员&#xff0c;一定不要错过这十个接单平台&#xff0c;助你轻松找到一手单&#xff0c;这10个平台分别是 1. 聚量推客&#xff1a; “聚量推客”汇聚了众多市场上有的和没有的地推网推拉新接单项目&#xff0c;目前比较火热&#xff0c;我们做地推和…

使用FP8加速PyTorch训练

现代的人工智能硬件架构(例如&#xff0c;Nvidia Hopper, Nvidia Ada Lovelace和Habana Gaudi2)中&#xff0c;FP8张量内核能够显著提高每秒浮点运算(FLOPS)&#xff0c;以及为人工智能训练和推理工作负载提供内存优化和节能的机会。 在这篇文章中&#xff0c;我们将介绍如何修…

geoserver面的填充样式错误记录

qgis生成如上的sld格式文件后发布到geoserver填充色没有问题&#xff0c;但是填充的斜线显示不出来&#xff0c;需要进行替换&#xff0c;例如 <se:WellKnownName>horline</se:WellKnownName> 替换成 <se:WellKnownName>shape://backslash</se:WellKnown…

打造智算中心新标杆,普洛斯数据中心荣获“2023年数据中心科技成果奖”一等奖

11月15&#xff0d;16日&#xff0c;由CDCC主办的2023第十一届数据中心标准大会在北京举行&#xff0c;大会同期举行“2023年数据中心科技成果奖”颁奖典礼。会上&#xff0c;普洛斯数据中心及美团联合申报的“智能算力中心弹性高效节能技术”荣获“2023年数据中心科技成果奖一…

【10套模拟】【5】

关键字&#xff1a; 数据的最小单位、归并排序&#xff08;两两归并&#xff09;、单链表顺序存取、邻接表表头顶点顺序存储随机访问、三角矩阵元素个数、堆的性质、冒泡排序、二叉树是否相同

安卓用户当心: CERT-IN 发布高危漏洞警告

已发现的漏洞一旦被利用&#xff0c;将构成严重风险&#xff0c;可能导致未经授权访问敏感信息。 印度计算机应急响应小组&#xff08;CERT-IN&#xff09;在最近发布的一份公告中&#xff0c;就影响印度安卓用户的新安卓漏洞发出了重要警告。 该警告对使用安卓 11、12、12L、…

OPPO发布AndesGPT大模型;Emu Video和Emu Edit的新突破

&#x1f989; AI新闻 &#x1f680; OPPO发布全新ColorOS 14及自主训练的AndesGPT大模型 摘要&#xff1a;OPPO在2023 OPPO开发者大会上发布了全新的ColorOS 14&#xff0c;并正式推出了自主训练的安第斯大模型&#xff08;AndesGPT&#xff09;。AndesGPT拥有对话增强、个人…

Java读取本地文件

import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException;public class Main {public static void main(String[] args) {String filePath "C:/Users/admin/Desktop/知识点记录.md";// 创建一个文件对象File f…

类BERT模型蒸馏实战

机器学习模型已经变得越来越大&#xff0c;以至于训练模型可能会给那些没有空闲集群的人带来痛苦。 此外&#xff0c;即使使用训练好的模型&#xff0c;当你的硬件与模型对其运行的期望不符时&#xff0c;推理的时间和内存成本也会飙升。 因此&#xff0c;为了缓解这个问题&…

easyExcle单元格合并

自定义单元格合并策略&#xff1a; /*** 自定义单元格合并策略** create: 2023-11-15 13:41**/ Data NoArgsConstructor AllArgsConstructor Slf4j public class EasyExcelCustomMergeStrategy implements RowWriteHandler {/*** 总数*/private Integer totalNum;//合并行计数…

数据服务化在京东平台API接口接入的实践

数据服务化在京东的实践 导读 本次分享的主题为数据服务化在京东的实践&#xff0c;主要包含三个模块&#xff1a;数据服务化的缘起、成长、如何将系统做得更好。 01 缘起&#xff1a;数据服务化从 0 到 1 1. 缘起 京东数据智能部负责维护数据资产和对外提供数据服务&#…

设置chunk自动扩展到多大

1. 设置chunk自动扩展 execute function task(modify chunk extendable on,8); 2. 设置dbs扩展到多大合适 execute function task(modify space sp sizes,testdb1024,1024,10240) testdb 初始1MB 下次扩1MB 最大10MB