webservice及xml工具类

我的入参实例
<MESSAGE>
  <BODY>
    <ROWS>
      <ROW>
        <REG_NO>123</REG_NO>
      </ROW>
    </ROWS>
  </BODY>
</MESSAGE>
pom文件
        <!--xstream相关依赖-->
        <dependency>
            <groupId>com.thoughtworks.xstream</groupId>
            <artifactId>xstream</artifactId>
            <version>1.4.9</version>
        </dependency>
        <!--Jsoup相关依赖-->
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.10.3</version>
        </dependency>
实体类
package webservice.util.entity;

import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.Data;
import lombok.experimental.Accessors;

@XStreamAlias("ROW")
@Data
@Accessors(chain = true)
public class Check {
    @XStreamAlias("REG_NO")
    protected String regNo;
}
工具类
1. WebServiceUtil工具类
package webservice.util;

import webservice.util.entity.WebService;

/**
 1. @ClassName WebServiceUtil
 2. @Description TOD0
 3. author axx
 4. Version 1.0
 **/
public class WebServiceUtil {
    //webservice的xml请求的前缀的string字符串(可自定义)
    private final static String prefixRequestXml = "<MESSAGE><BODY><ROWS>";

    //webservice的xml请求的后缀的string字符串(可自定义)
    private final static String suffixRequestXml = "</ROWS></BODY></MESSAGE>";

    private final static WebService webService = new WebService();  //该webservice类由idea根据wsdl文件自动生成

    //获取WebService的返回值
    public static <T> T getWebServiceResult(Object obj, Class<T> clas, String param) {
        String middleRequestXml = XMLUtil.toXml(obj);
        String xml = prefixRequestXml + middleRequestXml + suffixRequestXml;
        String result = webService.getWebServicePort().service(param, xml); //param是我们本次需求所需要的参数,视情况进行更改,其中.service方法的接口由idea根据wsdl文件自动生成
        T response = JaxbXmlUtil.convertToJavaBean(result, clas);
        return response;
    }
}
注意:
其中的webservice是由idea根据wsdl文件自动生成的类
以及其调用的.service方法的接口也会一同生成。
2. XMLUtil工具类
package webservice.util;

import org.apache.commons.lang.StringUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.parser.Parser;
import org.jsoup.parser.XmlTreeBuilder;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

/**
 * @ClassName XMLUtil
 * @Description TOD0
 * author axx
 * Version 1.0
 **/
public class XMLUtil {
    /**
     *
     * @param clazz
     *            类的字节码文件
     * @param xml
     *            传入的XML字符串
     * @return XML字符串转实体类
     */
    public static <T> T parseFromXml(Class<T> clazz, String xml) {
        XStream xStream = new XStream(new DomDriver());
        xStream.processAnnotations(clazz);
        @SuppressWarnings("unchecked")
        T t = (T) xStream.fromXML(xml);
        return t;
    }

    /**
     *
     *
     * @param obj
     *            实体类
     * @return 实体类转XML字符串
     */
    public static String toXml(Object obj) {
        XStream xStream = new XStream(new DomDriver());
        // 扫描@XStream注解
        xStream.processAnnotations(obj.getClass());
        return xStream.toXML(obj).replaceAll("\\_+", "_");//正则过滤双下划线转为单下划线
    }

    /**
     *
     * @Description: 获取xml格式字符串中指定的元素标签片段
     * @param xml
     *            需要xml格式的字符串
     * @param elementId
     *            节点名
     * @return
     */
    public static String getElementString(String xml, String elementId) {
        if (StringUtils.isBlank(xml) || StringUtils.isBlank(elementId)) {
            return null;
        }
        // 获取document对象
        Document document = Jsoup.parse(xml, "", new Parser(new XmlTreeBuilder()));
        // 获取对应的document片段
        return document.select(elementId).toString().replaceAll("\\s*", "");
    }

    /**
     *
     * @Description: xml字符串节点片段转对象
     * @param xml
     * @param elementId
     * @param clazz
     * @return
     */
    public static <T> T parseElementObj(String xml, String elementId, Class<T> clazz) {
        if (StringUtils.isBlank(xml) || StringUtils.isBlank(elementId)) {
            return null;
        }
        return parseFromXml(clazz, getElementString(xml, elementId));
    }
}

3. JaxbXmlUtil工具类
package webservice.util;

import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

/**
 * @ClassName JaxbXmlUtil
 * @Description TOD0
 * author axx
 * Version 1.0
 **/
public class JaxbXmlUtil {
    public static final String DEFAULT_ENCODING = "UTF-8";

    public JaxbXmlUtil() {
    }

    public static String convertToXml(Object obj) {
        return convertToXml(obj, "UTF-8");
    }

    public static String convertToXml(Object obj, String encoding) {
        String result = null;
        JAXBContext context = null;

        try {
            context = JAXBContext.newInstance(new Class[]{obj.getClass()});
            Marshaller marshaller = context.createMarshaller();
            marshaller.setProperty("jaxb.formatted.output", false);
            marshaller.setProperty("jaxb.encoding", encoding);
            StringWriter writer = new StringWriter();
            marshaller.marshal(obj, writer);
            result = writer.toString();
        } catch (JAXBException var6) {
            var6.printStackTrace();
        }

        return result;
    }

    public static String convertToXmlByCustomHeader(Object obj) {
        return convertToXmlByCustomHeader(obj, "UTF-8");
    }

    public static String convertToXmlByCustomHeader(Object obj, String encoding) {
        String result = null;
        JAXBContext context = null;

        try {
            context = JAXBContext.newInstance(new Class[]{obj.getClass()});
            Marshaller marshaller = context.createMarshaller();
            marshaller.setProperty("jaxb.formatted.output", false);
            marshaller.setProperty("jaxb.encoding", encoding);
            marshaller.setProperty("jaxb.fragment", true);
            StringWriter writer = new StringWriter();
            marshaller.marshal(obj, writer);
            result = writer.toString();
        } catch (JAXBException var6) {
            var6.printStackTrace();
        }

        return result;
    }

    public static <T> T convertToJavaBean(String xml, Class<T> t) {
        T obj = null;
        JAXBContext context = null;

        try {
            context = JAXBContext.newInstance(new Class[]{t});
            Unmarshaller unmarshaller = context.createUnmarshaller();
            obj = unmarshaller.unmarshal(new StringReader(xml));
        } catch (JAXBException var5) {
            var5.printStackTrace();
        }

        return obj;
    }
}
使用WebserviceUtil工具类
Check examine = new Check().setRegNo(reg_no);
        List<CheckRow> rows = WebServiceUtil.getWebServiceResult(examine, CheckMessage.class, "app=123,password=123456").getBODY().getROWS().getROW();
注意:
其中 CheckMessage 和 CheckRow 类由idea根据.xsd文件自动生成,
其中的param自行替换成自己所需的参数。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值