string类型的xml报文解析为java实体类object

Posted 米泽玄師

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了string类型的xml报文解析为java实体类object相关的知识,希望对你有一定的参考价值。

回馈广大同行网友系列~首先thanks for 网友们的无私分享,在抄完之后我献上我的解决整理~~~~~
公司用内网,纯手打的
xml报文demo

<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
	<ITEM>
		<XXXX></XXXX>
		...
	</ITEM>
	<ITEM>
		<XXXX></XXXX>
		...
	</ITEM>
</ROOT>

首先写一个XmlUtil工具类

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
...

public class XmlUtil
	
	public static <T> T convertXmlStrToObject(Class<?> clazz,String xmlStr)
		T xmlObject = null;
		try
			JAXBContext context = JAXBContext.newInstance(clazz);
			Unmarshaller unmarshaller = context.createUnmarshaller();
			xmlObject = (T) unmarshaller.unmarshal(new StringReader(xmlStr));
		 catch (Exception e)
			log.error("将报文转换为object失败:",e.getMessage());
		

		return xmlObject;
	

你需要转化的类

@Data
@XmlRootElement(name = "ROOT")
public class XXXRoot
	private List<XXX> ITEM;

ITEM对应了 < ITEM > 标签,如果要起别名可以试试@XmlElement(name = “ITEM”)我没试过,具体效果自己看吧

@XmlAccessorType(XmlAccessType.FIELD)
@Data
public class XXX implements Serializable
	@XmlElement(name="yyy")
	private String yy;

	.....

使用的时候,XXXRoot ddd = XmlUtil.convertXmlStrToObject(XXXRoot.class,xmlbaowenstring);

.net WebService接口参数为实体类数组,java调用接口怎么把参数转换成string类型的xml内容

比如,.net 接口为public MassgeReturn SendPackage(Package[] packages,string usrName),用java调用该接口,如果要将参数直接转成xml格式的string,那么xml的格式应该是怎么样的?例如:
string xml="<List_Package<UnSend_Package<PACKAGE_ID>L06000A45052774</PACKAGE_ID><PACKAGE_SHOW_ID></UnSend_Package></List_Package>";

String soapAction = "http://tempuri.org/UrgentSend";
// 指定WebService的命名空间和调用的方法名
SoapObject rpc = new SoapObject(nameSpace, methodName);
PropertyInfo info=new PropertyInfo();
info.setName("StringValue");
info.setValue(packagesXML);//转换为string的xml格式字符串
rpc.addProperty(info);
// 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = rpc;
// 设置是否调用的是dotNet开发的WebService
envelope.dotNet = true;
//(new MarshalBase64()).register(envelope);
// 等价于envelope.bodyOut = rpc;
envelope.setOutputSoapObject(rpc);
HttpTransportSE transport = new HttpTransportSE(endPoint);
transport.debug = false;

参考技术A 虽然我没用过你这个开发webservice,但用过xfire,建议你把数组改为string传值,然后那边进行split再转为数组

以上是关于string类型的xml报文解析为java实体类object的主要内容,如果未能解决你的问题,请参考以下文章

.net WebService接口参数为实体类数组,java调用接口怎么把参数转换成string类型的xml内容

xml字符串和java实体类相互转换JaxbXmlUtil工具类 附java实体类生成soap接口报文案例

java通过实体类组装报文

php如何解析多级xml报文?

java解析XML

解析xml文件,如何动态的封装成一个java类