WebService Server端
Sun Webservice 3种规范:
1. 规范一:JAX-WS, JAX-RPC
2. 规范二:JAXM& SAAJ
3. 规范三:JAX-RS
SOAP = HTTP + XML
SOAP协议: Simple Object Access Protocol 简单对象访问协议
SAOP协议组成: Envelope, Headers, Body
WSDL说明书 : Webservice Definition Language
阅读方式: 从下向上读。 服务地址 ——> xxSoapBinding ——> xx服务 (operation, input, output)
框架: Apache-CXF :支持多种webservice标准, 和Spring无缝整合。
文档地址: Apache CXF -- 文档
pom

<?xml version="1.0" encoding="UTF-8"?> <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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!--<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.6</version> <relativePath/> <!– lookup parent from repository –> </parent>--> <groupId>cn.itcast</groupId> <artifactId>jaxws-server</artifactId> <version>0.0.1-SNAPSHOT</version> <name>jaxws-server</name> <description>Demo project for Spring Boot</description> <properties> <java.version>11</java.version> </properties> <dependencies> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.3.9</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http-jetty</artifactId> <version>3.3.9</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>2.0.0-alpha4</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.20</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
module

package com.order.webservice.module; import lombok.Data; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; /** * 工单数据通知 返回 * */ @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "DATA") @Data public class YxxczyNoticeWorkOrderResult { @XmlElement(name = "RESULT") private String result; //1-成功/0-失败 @XmlElement(name = "RETURN_CODE") private String returnCode; @XmlElement(name = "RETURN_MSG") private String returnMsg; //返回信息 }
service

package com.order.webservice.service; public interface ReceiveOrderService { String yxxczyNoticeWorkOrder(String input); }
serviceImpl

package com.order.webservice.service.impl; import com.order.webservice.module.YxxczyNoticeWorkOrderResult; import com.order.webservice.service.ReceiveOrderService; import com.order.webservice.utils.XmlConvertUtil; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; @WebService public class ReceiveOrderServiceImplService implements ReceiveOrderService { @WebMethod public String yxxczyNoticeWorkOrder(@WebParam String input) { System.out.println(input); YxxczyNoticeWorkOrderResult r = new YxxczyNoticeWorkOrderResult(); return XmlConvertUtil.convertToXml(r); } }
utils

package com.order.webservice.utils; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import java.io.StringReader; import java.io.StringWriter; /** * xml格式转化工具类 * 1.xmlStr -> java bean * 2.java bean -> xmlStr */ public class XmlConvertUtil { /** * xml转换成JavaBean * * @param xml xml格式字符串 * @param t 待转化的对象 * @return 转化后的对象 */ @SuppressWarnings({ "unchecked" }) public static <T> T convertToJavaBean(String xml, Class<T> t) throws JAXBException { T obj = null; JAXBContext context = JAXBContext.newInstance(t); Unmarshaller unmarshaller = context.createUnmarshaller(); obj = (T) unmarshaller.unmarshal(new StringReader(xml)); return obj; } /** * JavaBean转换成xml * @param obj java bean * @return xml字符串 */ public static String convertToXml(Object obj) { String encoding = "UTF-8"; String result = null; try { JAXBContext context = JAXBContext.newInstance(obj.getClass()); Marshaller marshaller = context.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding); StringWriter writer = new StringWriter(); marshaller.marshal(obj, writer); result = writer.toString(); } catch (Exception e) { e.printStackTrace(); } return result; } }
main

package com.order.webservice; import com.order.webservice.service.impl.ReceiveOrderServiceImplService; import org.apache.cxf.interceptor.LoggingInInterceptor; import org.apache.cxf.interceptor.LoggingOutInterceptor; import org.apache.cxf.jaxws.JaxWsServerFactoryBean; public class Server { public static void main(String[] args) { //发布服务的工厂 JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean(); //设置服务地址 factory.setAddress("http://localhost:8000/order/api"); //设置服务类 factory.setServiceBean(new ReceiveOrderServiceImplService()); factory.getInInterceptors().add(new LoggingInInterceptor()); factory.getOutInterceptors().add(new LoggingOutInterceptor()); // factory.getOutInterceptors().add(new ClientAuthOutInterceptor("YYY", "1")); //发布服务 factory.create(); System.out.println("发布服务成功 端口 8000"); } }
Java对象和XML之间的相互转换
JAXB(JavaArchitecture for XML Binding) 根据XML Schema产生Java类的技术。
相关的类和接口:
- JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。
- Marshaller接口,将Java对象序列化为XML数据。
- Unmarshaller接口,将XML数据反序列化为Java对象。
相关的注解:
- @XmlType,将Java类或枚举类型映射到XML模式类型
- @XmlAccessorType(XmlAccessType.FIELD) ,控制字段或属性的序列化。
- @XmlAccessorOrder,控制JAXB 绑定类中属性和字段的排序。
- @XmlJavaTypeAdapter,使用定制的适配器(即扩展抽象类XmlAdapter并覆盖marshal()和unmarshal()方法),以序列化Java类为XML。
- @XmlElementWrapper ,对于数组或集合(即包含多个元素的成员变量),生成一个包装该数组或集合的XML元素(称为包装器)。
- @XmlRootElement,将Java类或枚举类型映射到XML元素。
- @XmlElement,将Java类的一个属性映射到与属性同名的一个XML元素。
- @XmlAttribute,将Java类的一个属性映射到与属性同名的一个XML属性。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
2019-11-19 Power Designer设计Mysql数据库表
2019-11-19 简单用户中心