zoukankan      html  css  js  c++  java
  • 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/> &lt;!&ndash; lookup parent from repository &ndash;&gt;
        </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>
    View Code

    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;  //返回信息
    
    }
    View Code

    service

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

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

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

    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");
        }
    }
    View Code

    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属性。
  • 相关阅读:
    Redis
    Log4Net
    EF脚手架生成数据库上下文(scaffold-dbcontext)
    quartz.net
    基于LNMP的小米电子商务网站平台
    LVS的DR模式负载均衡
    华为交换机SSH配置
    VMware ESXi 6.5安装
    VLAN划分
    华为路由设备SSH配置
  • 原文地址:https://www.cnblogs.com/smileblogs/p/15579096.html
Copyright © 2011-2022 走看看