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属性。

 

posted @ 2021-11-19 20:41  Peter.Jones  阅读(84)  评论(0编辑  收藏  举报