Spring boot中使用WebService和对象XML之间的转换

Spring boot中使用WebService

依赖
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web-services</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>2.7.18</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>2.7.18</version>
        </dependency>
        <!--使用XStream-->
        <dependency>
            <groupId>com.thoughtworks.xstream</groupId>
            <artifactId>xstream</artifactId>
            <version>1.4.10</version>
        </dependency>
调用WebService
public static Properties setting = PropertyUtil.getConfig("setting.properties"); //获取配置文件中的数据

JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
		Client client =  dcf.createClient(PropertyUtil.getPropValue( setting , "setting.hisWebserviceJkkAddress" )); //服务地址
		HTTPConduit conduit = (HTTPConduit)client.getConduit();
		HTTPClientPolicy policy = new HTTPClientPolicy();
		policy.setConnectionTimeout(10000);
		policy.setAllowChunking(false);
		policy.setReceiveTimeout(10000);
		conduit.setClient(policy);
		QName operateQName= new QName(PropertyUtil.getPropValue( setting , "setting.jkk_namespace_url"  ),PropertyUtil.getPropValue( setting , "setting.trans_code_jkk_query" )); //命名和函数
		Object[] invokeResult = new Object[0];
		try {
			invokeResult = client.invoke(operateQName, inXml);
		} catch (Exception e) {
			log.error("调用健康卡平台出错{}",e.getMessage());
		}
		String outXml=invokeResult[0].toString();
XML转对象工具类

注意:如果转换失败可以参考此链接文章

public class XsteamUtil {
    public static Object toBean(Class<?> clazz, String xml) {
        Object xmlObject = null;
        XStream xstream = new XStream();
        //不使用默认的类加载器,需要手动设置类加载器
        xstream.setClassLoader(JKKResult.class.getClassLoader());
        //安全防护
        XStream.setupDefaultSecurity(xstream);
        //每转换一个实体需要加入到这个数组。
        xstream.allowTypes(new Class[]{JKKResult.class, PatientOutxml.class, PatientOutXml.class, BaseInxml.class, PatrentInData.class});
        xstream.processAnnotations(clazz);
        xstream.autodetectAnnotations(true);
        xmlObject = xstream.fromXML(xml);

        return xmlObject;
    }
}
对象转XML工具类

使用泛型类转换报错去看另一篇笔记

@Slf4j
public class XMLUtil {

    /**
     * 将对象直接转换成String类型的 XML输出
     *
     * @param obj
     * @return
     */
    public static String convertToXml(Object obj) {
        // 创建输出流
        StringWriter sw = new StringWriter();
        try {
            // 利用jdk中自带的转换类实现
            JAXBContext context = JAXBContext.newInstance(obj.getClass());
            Marshaller marshaller = context.createMarshaller();
            // 格式化xml输出的格式
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
            // 将对象转换成输出流形式的xml
            marshaller.marshal(obj, sw);
        }catch (MarshalException e1){
            log.error("error1:{}",e1.getMessage());
            e1.printStackTrace();
        } catch (JAXBException e) {
            log.error("error:{}",e.getMessage());
            e.printStackTrace();
        }
        return sw.toString();
    }
    }
实体中所需的改变
类上的注解
@XmlAccessorType(XmlAccessType.FIELD) //将字段绑定xml
@XStreamAlias("data") //如果类名和标签名不匹配,用此注解进行映射
方法上的注解:
 @XmlElement(name = "hosCardNo") //映射属性名和标签名
转换集合:
 @XStreamImplicit(itemFieldName = "deptInfo")
    private List<Departments> departments;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值