使用castor实现xml和java对象的转换

对于xml和java对象的转换这里用castor进行转换,当然还有别的方式

方式一:castor和xml映射文件配合

首先提供需要解析的XML(内容不重要,重要的是格式)

<?xml version="1.0" encoding="UTF-8"?>
<alarm>
     <alarmType> 
		<![CDATA[
	 		<?xml version="1.0" encoding="UTF-8"?>
			   <QryODS3Req>
			    	<CARD_NO>10404117200000306099922333</CARD_NO>
			   </QryODS3Req>
		]]>
    </alarmType>
    <detailContent>
		<time>2018-5-23 17:44</time>
		<person>
			<name>rose</name>
			<age>18</age>
			<gender>femal</gender>
		</person>
		<content>连接超时</content>
    </detailContent>
    <alarmDepartment>asiainfo</alarmDepartment>
    <response>回复</response>
    <params>
		<param  protocol="HTTP" port="8080" ip="192.168.133.121"></param>
		<param  protocol="HTTPs" port="8081" ip="192.168.133.122"></param>
     </params>
</alarm>

对应的javaBean:

一共有6个bean:Alarm 、DetailContent 、Person 、QryODS3Req 、Params 、Params

package com.test;
public class Alarm {
	private String alarmType;
	private DetailContent detailContent;
	private String alarmDepartment;
	private String Response;
	private Params params;
	
	public String getResponse() {
		return Response;
	}

	public void setResponse(String response) {
		Response = response;
	}

	public Params getParams() {
		return params;
	}

	public void setParams(Params params) {
		this.params = params;
	}

	public String getAlarmType() {
		return alarmType;
	}

	public void setAlarmType(String alarmType) {
		this.alarmType = alarmType;
	}

	public DetailContent getDetailContent() {
		return detailContent;
	}

	public void setDetailContent(DetailContent detailContent) {
		this.detailContent = detailContent;
	}

	public String getAlarmDepartment() {
		return alarmDepartment;
	}
	public void setAlarmDepartment(String alarmDepartment) {
		this.alarmDepartment = alarmDepartment;
	}
	@Override
	public String toString() {
		return "Alarm [alarmType=" + alarmType + ", detailContent="
				+ detailContent + ", alarmDepartment=" + alarmDepartment
				+ ", response=" + Response + ", params=" + params + "]";
	}
}
package com.test;

public class DetailContent {
	private String time;
	private Person person;
	private String content;
	
	public String getTime() {
		return time;
	}
	public void setTime(String time) {
		this.time = time;
	}
	public Person getPerson() {
		return person;
	}
	public void setPerson(Person person) {
		this.person = person;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	@Override
	public String toString() {
		return "DetailContent [time=" + time + ", person=" + person
				+ ", content=" + content + "]";
	}
}
package com.test;

public class QryODS3Req {
	private String CARD_NO;

	public String getCARD_NO() {
		return CARD_NO;
	}
	public void setCARD_NO(String cARD_NO) {
		CARD_NO = cARD_NO;
	}
	
}
package com.test;

public class Person {
	public String name;
	public String age;
	public String gender;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + ", gender=" + gender
				+ "]";
	}
}

package com.test;

public class Params {
	private Param[] param;

	public Param[] getParam() {
		return param;
	}
	public void setParam(Param[] param) {
		this.param = param;
	}
}
package com.test;

public class Param {
	private String protocol;
	private String port;
	private String ip;
	public String getProtocol() {
		return protocol;
	}
	public void setProtocol(String protocol) {
		this.protocol = protocol;
	}
	public String getPort() {
		return port;
	}
	public void setPort(String port) {
		this.port = port;
	}
	public String getIp() {
		return ip;
	}
	public void setIp(String ip) {
		this.ip = ip;
	}
	@Override
	public String toString() {
		return "Param [protocol=" + protocol + ", port=" + port + ", ip=" + ip
				+ "]";
	}
}

对应的Alarm.xmll的解析配置:mapping.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Mapping DTD Version 1.0//EN" "http://castor.org/mapping.dtd">
<mapping>
	<class name="com.asiainfo.Alarm" auto-complete="true">
		<map-to xml="alarm" />
		<field name="alarmType" type="string">
			<bind-xml name="alarmType" node="element"/>
		</field>
		 <field name="detailContent" type="com.asiainfo.DetailContent">
			<bind-xml name="detailContent" node="element" />
		</field> 
		<field name="alarmDepartment" type="string">
			<bind-xml name="alarmDepartment" node="element" />
		</field>
		<field name="response" type="string">
			<bind-xml name="Response" node="element" />
		</field>
		<field name="params"  type="com.asiainfo.Params">
			<bind-xml name="params" node="element" />
		</field>
	</class>

	<class name="com.asiainfo.DetailContent"  auto-complete="true">
		<map-to xml="detailContent" />
		<field name="time" type="string">
			<bind-xml name="time" node="element"/>
		</field>
		<field name="person" type="com.asiainfo.Person">
			<bind-xml name="person" node="element"/>
		</field>
		<field name="content" type="string">
			<bind-xml name="content" node="element"/>
		</field>
	</class>

	<class name="com.asiainfo.Person" auto-complete="true">
		<map-to xml="person" />
		<field name="name"  type="string">
			<bind-xml name="name" node="element"/>
		</field>
		<field name="age"  type="string">
			<bind-xml name="age" node="element" />
		</field>
		<field name="gender"  type="string">
			<bind-xml name="gender" node="element"  />
		</field>
	</class>
	<class name="com.asiainfo.Params" auto-complete="true">
		<map-to xml="Params" />
		<field name="Param" collection="array" type="com.asiainfo.Param">
			<bind-xml name="Param" node="element"/>
		</field>
	</class>
	<!--protocol="HTTP" port="8184" ip="192.168.133.121"  -->
	<class name="com.asiainfo.Param" auto-complete="true">
		<map-to xml="person" />
		<field name="protocol"  type="string">
			<bind-xml name="protocol" node="attribute"/>
		</field>
		<field name="port"  type="string">
			<bind-xml name="port" node="attribute" />
		</field>
		<field name="ip"  type="string">
			<bind-xml name="ip" node="attribute"  />
		</field>
	</class>
</mapping>

这是Alarm.xml中 <![CDATA[]]>里面的mapping配置:Qry.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Mapping DTD Version 1.0//EN" "http://castor.org/mapping.dtd">
<mapping>
<!-- 
 <?xml version="1.0" encoding="UTF-8"?>
			<QryODS3Req>
			    <CARD_NO>10404117200000306099922333</CARD_NO>
			</QryODS3Req>
 -->
	<class name="com.asiainfo.QryODS3Req" auto-complete="true">
		<map-to xml="QryODS3Req" />
		<field name="CARD_NO" type="string">
			<bind-xml name="CARD_NO" node="element"/>
		</field>
	</class>
	
</mapping>

使用的jar包是:castor-1.3.jar

Parser.java主类

package com.test;

import java.io.*;

import org.exolab.castor.mapping.Mapping;
import org.exolab.castor.xml.MarshalException;
import org.exolab.castor.xml.Marshaller;
import org.exolab.castor.xml.Unmarshaller;
import org.exolab.castor.xml.ValidationException;
import org.exolab.castor.xml.XMLContext;

public class Parser {
	public static final XMLContext xml = new XMLContext();

	public static void main(String[] args) {
		Mapping mapping = new Mapping();
		Alarm alarm = null;
		String xmlFileName = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><alarm><alarmType><![CDATA[<?xml version=\"1.0\" encoding=\"UTF-8\"?><QryODS3Req><CARD_NO>10404117200000306099922333</CARD_NO></QryODS3Req>]]></alarmType><detailContent><time>2018-5-23  17:44</time><person><name>rose</name><age>18</age><gender>femal</gender></person><content>连接超时</content></detailContent><alarmDepartment>baidu</alarmDepartment><params><param  protocol=\"HTTP\" port=\"8080\" ip=\"192.168.133.121\"></param><param  protocol=\"HTTPs\" port=\"8081\" ip=\"192.168.133.122\"></param></params></alarm>";
		StringReader reader = null;
		// String message=null;
		try {
			// 加载对应的mapping映射文件: 方式一和方式三优先加载方式一,就是项目的根目录下的mapping.xml而不是第三种方式
			// 所以如果将mapping.xml放在项目的根目录就不需要放在com.asiainfo下了,这个目录下的在此路径获取的方式下不会被读取
			// 加载方式一:获取放在根目录下的mapping.xml
			// mapping.loadMapping(System.getProperty("user.dir")
			// +"\\mapping.xml");//下面的方式也可以
			// 加载方式二:直接获取根目录下的mapping.xml
			// mapping.loadMapping("mapping.xml");
			// 加载方式三:获取com.asiainfo下的mapping.xml
			mapping.loadMapping(System.getProperty("user.dir")+ "\\src\\com\\asiainfo\\mapping.xml");
			/** 方式一:读取要解析的xml文件的方式 */
			// /caster/src/com/asiainfo/Alarm.xml
			// FileInputStream fis=new
			// FileInputStream(System.getProperty("user.dir")
			// +"\\src\\com\\asiainfo\\Alarm.xml");
			// message=new String(IOUtils.toByteArray(fis),"utf-8");
			// reader = new StringReader(message);

			/** 方式二:读取xml报文 */
			reader = new StringReader(xmlFileName);
			xml.addMapping(mapping);
			Unmarshaller unmar = xml.createUnmarshaller();
			unmar.setMapping(mapping);
			unmar.setClass(Alarm.class);
			alarm = (Alarm) unmar.unmarshal(reader);
//			 System.out.println("alarm--AlarmDepartment:" +
//			 alarm.getAlarmDepartment());
//			 System.out.println("alarm--AlarmType:" + alarm.getAlarmType());
//			QryODS3Req qryODS3Req = parseQry(alarm.getAlarmType());
//			 System.out.println("============ parse QryODS3Req  start  ================");
//			 System.out.println(qryODS3Req.getCARD_NO());
//			 System.out.println("=============parse  QryODS3Req  end  =============");
//			 System.out.println("alarm--getDetailContent:" +
//			 alarm.getDetailContent());
//			Params params = alarm.getParams();
//			Param[] param = params.getParam();
//			for (int i = 0; i < param.length; i++) {
//				String protocol = param[i].getIp();
//				String port = param[i].getPort();
//				String ip = param[i].getIp();
//				System.out.println("param["+i+"]:"+protocol+":"+port+":"+ip);
//			}
			// System.out.println("=========================解析xml结束=======================");
		} catch (MarshalException e) {
			e.printStackTrace();
		} catch (ValidationException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println("=========================组装xml开始=======================");
		StringWriter writer = new StringWriter();
		try {
			String forma = forma();
			alarm.setAlarmType("<![CDATA[" + forma + "]]>");
			// 组装一个response,在解析的时候,报文里是没有的
			alarm.setResponse("000000000");
			Marshaller marsh = new Marshaller(writer);
			marsh.setMapping(mapping);
			marsh.marshal(alarm);
			String alarmReplace = "";
			alarmReplace = new String(writer.toString());
			alarmReplace = replaceStr(alarmReplace, "&quot;", "\"");
			alarmReplace = replaceStr(alarmReplace, "&lt;", "<");
			alarmReplace = replaceStr(alarmReplace, "&gt;", ">");
			System.out.println("组装成xml:" + alarmReplace);

			System.out.println("=========================组装xml结束=======================");
		} catch (MarshalException e) {
			e.printStackTrace();
		} catch (ValidationException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static QryODS3Req parseQry(String xmlFileName) {
		QryODS3Req qryODS3Req = new QryODS3Req();
		Mapping mapping = new Mapping();
		StringReader reader = null;
		try {
			mapping.loadMapping(System.getProperty("user.dir")+ "\\src\\com\\asiainfo\\Qry.xml");
			reader = new StringReader(xmlFileName);
			xml.addMapping(mapping);
			Unmarshaller unmar = xml.createUnmarshaller();
			unmar.setMapping(mapping);
			unmar.setClass(QryODS3Req.class);
			qryODS3Req = (QryODS3Req) unmar.unmarshal(reader);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return qryODS3Req;
	}

	public static String replaceStr(String str, String strOld, String strNew) {
		int iIndex = str.indexOf(strOld);
		while (iIndex >= 0) {
			String str1 = str.substring(0, iIndex);
			String str2 = str.substring(iIndex + strOld.length(), str.length());
			str = str1 + strNew + str2;
			iIndex = str.indexOf(strOld, iIndex + strNew.length());
		}
		return str;
	}
	public static String forma() {
		Mapping mapping = new Mapping();
		StringWriter writer = new StringWriter();
		System.out.println("=========================组装xml  start=======================");
		try {
			mapping.loadMapping(System.getProperty("user.dir")+ "\\src\\com\\asiainfo\\Qry.xml");
			QryODS3Rsp qryODS3Rsp = new QryODS3Rsp();
			qryODS3Rsp.setRslt("33333333333333336666666666666666");
			qryODS3Rsp.setRslt("000003333333333333333");
			qryODS3Rsp.setEslt("999999999999999999999");
			Marshaller marsh = new Marshaller(writer);
			marsh.setMapping(mapping);
			// marsh.marshal(QryODS3Req);
			marsh.marshal(qryODS3Rsp);
			System.out.println("组装成xml:" + writer.toString());

			System.out.println("=========================组装xml  end=======================");
		} catch (MarshalException e) {
			e.printStackTrace();
		} catch (ValidationException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return writer.toString();
	}
}

关于文件的加载方式的说明:(目录结构后面被自己修改了,可忽略)
使用castor实现xml和java对象的转换

方式二:通过实现类:XMLClassDescriptorImpl进行转换,也是借助castor来实现的,只不过不需要xml的映射文件了

这里只取了几个标签做demo,仅供参考哦!
方式一和方式二的转换速度:方式一的速度比方式二的速度慢

Alarm.xml

<?xml version="1.0" encoding="UTF-8"?>
<Alarm>
	<AlarmType> 
	<![CDATA[
	       <?xml version="1.0" encoding="UTF-8"?>
			<QryODS3Req>
			    <CARD_NO>10404117200000306099922333</CARD_NO>
			</QryODS3Req>
          ]]>
    </AlarmType>
	<DetailContent>
		<Time>2018-5-23 17:44</Time>
		<Content>连接超时</Content>
	</DetailContent>
	<AlarmDepartment>asiainfo</AlarmDepartment>
</Alarm>

对应的Alarm 类

package com.descripter;

import java.util.ArrayList;

import org.exolab.castor.xml.Marshaller;
import org.exolab.castor.xml.Unmarshaller;

public class Alarm {
	/*/caster/src/com/descripter/Alarm.java
	<Alarm>
		   <AlarmType> 
			<![CDATA[
			    <?xml version="1.0" encoding="UTF-8"?>
					<QryODS3Req>
					    <CARD_NO>10404117200000306099922333</CARD_NO>
					</QryODS3Req>
		        ]]>
	         </AlarmType>
		<DetailContent>
			<Time>2018-5-23 17:44</Time>
		</DetailContent>
		<AlarmDepartment>baidu</AlarmDepartment>
   </Alarm>
	 */
	public Alarm() {
		super();
	}
	private AlarmType AlarmType;
//	private DetailContent[] DetailContent;
	private ArrayList<DetailContent> DetailContent;
	private String AlarmDepartment;
//	private String Response;


//	public String getResponse() {
//		return Response;
//	}
	
	public void setAlarmType(AlarmType alarmType) {
		AlarmType = alarmType;
	}

//	public void setResponse(String response) {
//		Response = response;
//	}

//	public DetailContent[] getDetailContent() {
//		return DetailContent;
//	}
//
//	public void setDetailContent(DetailContent[] detailContent) {
//		DetailContent.
//	}

	public String getAlarmDepartment() {
		return AlarmDepartment;
	}

	public ArrayList<DetailContent> getDetailContent() {
		return DetailContent;
	}

	public void setDetailContent(DetailContent detailContent) {
		DetailContent.add(detailContent); 
	}

	public void setAlarmDepartment(String alarmDepartment) {
		AlarmDepartment = alarmDepartment;
	}

	
	public AlarmType getAlarmType() {
		return AlarmType;
	}
	public void removeDetailContent() {
		DetailContent.clear();
	}
	public static Alarm unmarshal(java.io.Reader reader)
	        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException{
	    return (Alarm) Unmarshaller.unmarshal(Alarm.class, reader);
	} 
	public void marshal(java.io.Writer out)
		        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException {
		        
		Marshaller.marshal(this, out);
	}
	 public void validate()
		        throws org.exolab.castor.xml.ValidationException
		    {
		        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
		        validator.validate(this);
		    } //-- void validate() 
		    public boolean isValid()
		    {
		        try {
		            validate();
		        }
		        catch (org.exolab.castor.xml.ValidationException vex) {
		            return false;
		        }
		        return true;
		    } //-- boolean isValid() 

}

AlarmDescriptor 描述类:

package com.descripter;

import org.exolab.castor.xml.*;
import org.exolab.castor.xml.util.XMLFieldDescriptorImpl;


public class AlarmDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
	private java.lang.String nsPrefix;

	private java.lang.String nsURI;

	private java.lang.String xmlName;

	private org.exolab.castor.xml.XMLFieldDescriptor identity;
	
	public AlarmDescriptor() {
		super();
		xmlName = "Alarm";
		// -- set grouping compositor
		setCompositorAsSequence();
		XMLFieldDescriptorImpl desc = null;
		XMLFieldHandler handler = null;
		FieldValidator fieldValidator = null;
		// -- initialize attribute descriptors

		// -- initialize element descriptors

		/*
		 * private AlarmType AlarmType;
		 */
		desc = new XMLFieldDescriptorImpl(AlarmType.class, "AlarmType","AlarmType", NodeType.Element);
//		desc.setImmutable(false);
		handler = (new XMLFieldHandler() {
			public java.lang.Object getValue(java.lang.Object object)
					throws IllegalStateException {
				Alarm target = (Alarm) object;
				return target.getAlarmType();
			}

			public void setValue(java.lang.Object object, java.lang.Object value)
					throws IllegalStateException, IllegalArgumentException {
				try {
					Alarm target = (Alarm) object;
					target.setAlarmType((AlarmType) value);
					} catch (Exception ex) {
					throw new IllegalStateException(ex.toString());
				}
			}

			public java.lang.Object newInstance(java.lang.Object parent) {
				return 	null;
				}
		});
		desc.setHandler(handler);
		desc.setRequired(true);
		desc.setMultivalued(false);
		addFieldDescriptor(desc);

		// -- validation code for: _version
		fieldValidator = new FieldValidator();
		fieldValidator.setMinOccurs(1);
//		{ // -- local scope
//			StringValidator sv = new StringValidator();
//			sv.setLength(9);
//			sv.setWhiteSpace("preserve");
//			fieldValidator.setValidator(sv);
//		}
		desc.setValidator(fieldValidator);

		/*
		 * private DetailContent DetailContent;
		 *  写成了         NodeType.Text             
		 */                                                        
		desc = new XMLFieldDescriptorImpl(DetailContent.class, "DetailContent","DetailContent", NodeType.Element);
//		desc.setImmutable(true);
		handler = (new XMLFieldHandler() {
			public java.lang.Object getValue(java.lang.Object object)
					throws IllegalStateException {
				Alarm target = (Alarm) object;
				return target.getDetailContent();
			}

			public void setValue(java.lang.Object object, java.lang.Object value)
					throws IllegalStateException, IllegalArgumentException {
				try {
					Alarm target = (Alarm) object;
					target.setDetailContent((DetailContent) value);
				} catch (Exception ex) {
					throw new IllegalStateException(ex.toString());
				}
			}
			 public void resetValue(Object object) throws IllegalStateException, IllegalArgumentException {
	                try {
	                	Alarm target = (Alarm) object;
	                    target.removeDetailContent();
	                } catch (java.lang.Exception ex) {
	                    throw new IllegalStateException(ex.toString());
	                }
	            }
			public java.lang.Object newInstance(java.lang.Object parent) {
				return new DetailContent();
			}
		});
		desc.setSchemaType("com.descripter.DetailContent");
		desc.setHandler(handler);
        desc.setRequired(true);
        desc.setMultivalued(false);
        addFieldDescriptor(desc);
        
        //-- validation code for: _transInfo
//        fieldValidator = new FieldValidator();
//        fieldValidator.setMinOccurs(1);
//        desc.setValidator(fieldValidator);

		/*
		 *  private String AlarmDepartment;
		 */
		desc = new XMLFieldDescriptorImpl(String.class, "AlarmDepartment", "AlarmDepartment",NodeType.Element);
		handler = (new XMLFieldHandler() {
			public java.lang.Object getValue(java.lang.Object object)
					throws IllegalStateException {
				Alarm target = (Alarm) object;
				return target.getAlarmDepartment();
			}

			public void setValue(java.lang.Object object, java.lang.Object value)
					throws IllegalStateException, IllegalArgumentException {
				try {
					Alarm target = (Alarm) object;
					target.setAlarmDepartment((java.lang.String) value);
				} catch (Exception ex) {
					throw new IllegalStateException(ex.toString());
				}
			}

			public java.lang.Object newInstance(java.lang.Object parent) {
				return  null;
			}
		});
		desc.setHandler(handler);
        desc.setRequired(true);
        desc.setMultivalued(false);
        addFieldDescriptor(desc);
        
        //-- validation code for: _testFlag
        fieldValidator = new FieldValidator();
        fieldValidator.setMinOccurs(1);
//        { //-- local scope
//            StringValidator sv = new StringValidator();
//            sv.setLength(1);
//            sv.setWhiteSpace("preserve");
//            fieldValidator.setValidator(sv);
//        }
        desc.setValidator(fieldValidator);
		/*
		 *  private String Response;
		 */
//		/*desc = new XMLFieldDescriptorImpl(String.class, "Response","Response", NodeType.Element);
//		handler = (new XMLFieldHandler() {
//			public java.lang.Object getValue(java.lang.Object object)
//					throws IllegalStateException {
//				Alarm target = (Alarm) object;
//				return target.getResponse();
//			}
//
//			public void setValue(java.lang.Object object, java.lang.Object value)
//					throws IllegalStateException, IllegalArgumentException {
//				try {
//					Alarm target = (Alarm) object;
//					target.setResponse((java.lang.String) value);
//				} catch (Exception ex) {
//					throw new IllegalStateException(ex.toString());
//				}
//			}
//
//			public java.lang.Object newInstance(java.lang.Object parent) {
//				return null;
//			}
//		});
//		desc.setHandler(handler);
//		desc.setRequired(true);
//		desc.setMultivalued(false);
//		addFieldDescriptor(desc);
//
//		// -- validation code for: Response
//		fieldValidator = new FieldValidator();
//		fieldValidator.setMinOccurs(1);
//		desc.setValidator(fieldValidator);*/

	} // -- com.asiainfo.mcas.filegen.InterBOSS.InterBOSSDescriptor()
	      //-----------/
	     //- Methods -/
	    //-----------/
	    public org.exolab.castor.mapping.AccessMode getAccessMode()
	    {
	        return null;
	    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 

	    public org.exolab.castor.mapping.ClassDescriptor getExtends()
	    {
	        return null;
	    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 

	    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
	    {
	        return identity;
	    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 


	    public java.lang.Class getJavaClass()
	    {
	        return Alarm.class;
	    } //-- java.lang.Class getJavaClass() 

	    public java.lang.String getNameSpacePrefix()
	    {
	        return nsPrefix;
	    } //-- java.lang.String getNameSpacePrefix() 

	    public java.lang.String getNameSpaceURI()
	    {
	        return nsURI;
	    } //-- java.lang.String getNameSpaceURI() 

	    public org.exolab.castor.xml.TypeValidator getValidator()
	    {
	        return this;
	    } //-- org.exolab.castor.xml.TypeValidator getValidator() 

	    public java.lang.String getXMLName()
	    {
	        return xmlName;
	    } //-- java.lang.String getXMLName() 
}

AlarmType 类:

package com.descripter;

import org.exolab.castor.xml.Marshaller;
import org.exolab.castor.xml.Unmarshaller;
public class AlarmType {
	private String _content;

	public String getContent() {
		return _content;
	}

	public void setContent(String content) {
		this._content = content;
	}
	public static AlarmType unmarshal(java.io.Reader reader)
	        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException{
	    return (AlarmType) Unmarshaller.unmarshal(AlarmType.class, reader);
	} 
	public void marshal(java.io.Writer out)
		        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException {
		        
		Marshaller.marshal(this, out);
	}
}

AlarmTypeDescriptor 描述类

package com.descripter;

import org.exolab.castor.xml.FieldValidator;
import org.exolab.castor.xml.NodeType;
import org.exolab.castor.xml.XMLFieldHandler;
import org.exolab.castor.xml.util.XMLFieldDescriptorImpl;
import org.exolab.castor.xml.validators.StringValidator;

public class AlarmTypeDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {
	private java.lang.String nsPrefix;

	private java.lang.String nsURI;

	private java.lang.String xmlName;

	private org.exolab.castor.xml.XMLFieldDescriptor identity;

	public AlarmTypeDescriptor() {
		super();
		xmlName = "AlarmType";
		// -- set grouping compositor
		setCompositorAsSequence();
		XMLFieldDescriptorImpl desc = null;
		XMLFieldHandler handler = null;
		FieldValidator fieldValidator = null;
		// -- initialize attribute descriptors
		// -- initialize element descriptors

		/*
		 * String content;
		 */
		desc = new XMLFieldDescriptorImpl(String.class, "_content","PCDATA", NodeType.Text);
		desc.setImmutable(true);
		handler = (new XMLFieldHandler() {
			public java.lang.Object getValue(java.lang.Object object)
					throws IllegalStateException {
				AlarmType target = (AlarmType) object;
				return target.getContent();
			}

			public void setValue(java.lang.Object object, java.lang.Object value)
					throws IllegalStateException, IllegalArgumentException {
				try {
					AlarmType target = (AlarmType) object;
					target.setContent((java.lang.String) value);
				} catch (Exception ex) {
					throw new IllegalStateException(ex.toString());
				}
			}

			public java.lang.Object newInstance(java.lang.Object parent) {
				return null;
			}
		});
		desc.setHandler(handler);
		addFieldDescriptor(desc);

		// -- validation code for: _content
		fieldValidator = new FieldValidator();
		{ // -- local scope
			StringValidator sv = new StringValidator();
			sv.setWhiteSpace("preserve");
			fieldValidator.setValidator(sv);
		}
		desc.setValidator(fieldValidator);

		// -- initialize attribute descriptors

		// -- initialize element descriptors

	} // -- com.asiainfo.mcas.filegen.InterBOSS.SvcContDescriptor()

	// -----------/
	// - Methods -/
	// -----------/
	public org.exolab.castor.mapping.AccessMode getAccessMode() {
		return null;
	} // -- org.exolab.castor.mapping.AccessMode getAccessMode()

	public org.exolab.castor.mapping.ClassDescriptor getExtends() {
		return null;
	} // -- org.exolab.castor.mapping.ClassDescriptor getExtends()

	public org.exolab.castor.mapping.FieldDescriptor getIdentity() {
		return identity;
	} // -- org.exolab.castor.mapping.FieldDescriptor getIdentity()

	public java.lang.Class getJavaClass() {
		return AlarmType.class;
	} // -- java.lang.Class getJavaClass()

	public java.lang.String getNameSpacePrefix() {
		return nsPrefix;
	} // -- java.lang.String getNameSpacePrefix()

	public java.lang.String getNameSpaceURI() {
		return nsURI;
	} // -- java.lang.String getNameSpaceURI()

	public org.exolab.castor.xml.TypeValidator getValidator() {
		return this;
	} // -- org.exolab.castor.xml.TypeValidator getValidator()
	
	public java.lang.String getXMLName() {
		return xmlName;
	} // -- java.lang.String getXMLName()

}

DetailContent 类:

package com.descripter;

import org.exolab.castor.xml.Marshaller;
import org.exolab.castor.xml.Unmarshaller;

public class DetailContent {
	private String time;
//	private Person Person;

	public DetailContent() {
		super();
	}

	public String getTime() {
		return time;
	}

	public void setTime(String time) {
		this.time = time;
	}

//	public Person getPerson() {
//		return Person;
//	}
//
//	public void setPerson(Person person) {
//		this.Person = person;
//	}

	public static DetailContent unmarshal(java.io.Reader reader)
			throws org.exolab.castor.xml.MarshalException,
			org.exolab.castor.xml.ValidationException {
		return (DetailContent) Unmarshaller.unmarshal(DetailContent.class,
				reader);
	}

	public void marshal(java.io.Writer out)
			throws org.exolab.castor.xml.MarshalException,
			org.exolab.castor.xml.ValidationException {

		Marshaller.marshal(this, out);
	}

	public void validate() throws org.exolab.castor.xml.ValidationException {
		org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
		validator.validate(this);
	} // -- void validate()

	public boolean isValid() {
		try {
			validate();
		} catch (org.exolab.castor.xml.ValidationException vex) {
			return false;
		}
		return true;
	} // -- boolean isValid()
}

DetailContentDescriptor 描述类:

package com.descripter;

import org.exolab.castor.xml.FieldValidator;
import org.exolab.castor.xml.NodeType;
import org.exolab.castor.xml.XMLFieldHandler;
import org.exolab.castor.xml.util.XMLFieldDescriptorImpl;
import org.exolab.castor.xml.validators.StringValidator;

public class DetailContentDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl{
	private java.lang.String nsPrefix;

	private java.lang.String nsURI;

	private java.lang.String xmlName;

	private org.exolab.castor.xml.XMLFieldDescriptor identity;
	public DetailContentDescriptor() {
		super();
		xmlName = "DetailContent";
		// -- set grouping compositor
		setCompositorAsSequence();
		XMLFieldDescriptorImpl desc = null;
		XMLFieldHandler handler = null;
		FieldValidator fieldValidator = null;
		// -- initialize attribute descriptors
		// -- initialize element descriptors

		/*
		 * private String time;
		 */
		desc = new XMLFieldDescriptorImpl(java.lang.String.class, "time", "Time", NodeType.Element);
        desc.setImmutable(true);
        handler = (new XMLFieldHandler() {
            public java.lang.Object getValue( java.lang.Object object ) 
                throws IllegalStateException
            {
            	DetailContent target = (DetailContent) object;
                return target.getTime();
            }
            public void setValue( java.lang.Object object, java.lang.Object value) 
                throws IllegalStateException, IllegalArgumentException
            {
                try {
                	DetailContent target = (DetailContent) object;
                    target.setTime((java.lang.String) value);
                }
                catch (Exception ex) {
                    throw new IllegalStateException(ex.toString());
                }
            }
            public java.lang.Object newInstance( java.lang.Object parent ) {
                return null;
            }
        } );
        desc.setHandler(handler);
        addFieldDescriptor(desc);
        
        //-- validation code for: _content
        fieldValidator = new FieldValidator();
        { //-- local scope
            StringValidator sv = new StringValidator();
            sv.setWhiteSpace("preserve");
            fieldValidator.setValidator(sv);
        }
        desc.setValidator(fieldValidator);
        
        //-- initialize attribute descriptors
        
        //-- initialize element descriptors
        
        /*
	     * private Person person;
         */
        
//        desc = new XMLFieldDescriptorImpl(Person.class, "Person", "Person", NodeType.Text);
//        desc.setImmutable(true);
//        handler = (new XMLFieldHandler() {
//            public java.lang.Object getValue( java.lang.Object object ) 
//                throws IllegalStateException
//            {
//            	DetailContent target = (DetailContent) object;
//                return target.getPerson();
//            }
//            public void setValue( java.lang.Object object, java.lang.Object value) 
//                throws IllegalStateException, IllegalArgumentException
//            {
//                try {
//                	DetailContent target = (DetailContent) object;
//                    target.setPerson((Person) value);
//                }
//                catch (Exception ex) {
//                    throw new IllegalStateException(ex.toString());
//                }
//            }
//            public java.lang.Object newInstance( java.lang.Object parent ) {
//                return new Person();
//            }
//        } );
//        desc.setHandler(handler);
//        desc.setRequired(true);
//        desc.setMultivalued(false);
//        addFieldDescriptor(desc);
//        
//        //-- validation code for: _transInfo
//        fieldValidator = new FieldValidator();
//        fieldValidator.setMinOccurs(1);
//        desc.setValidator(fieldValidator);
    } //-- com.asiainfo.mcas.filegen.InterBOSS.SvcContDescriptor()

      //-----------/
     //- Methods -/
    //-----------/

    public org.exolab.castor.mapping.AccessMode getAccessMode()
    {
        return null;
    } //-- org.exolab.castor.mapping.AccessMode getAccessMode() 

    public org.exolab.castor.mapping.ClassDescriptor getExtends()
    {
        return null;
    } //-- org.exolab.castor.mapping.ClassDescriptor getExtends() 

    public org.exolab.castor.mapping.FieldDescriptor getIdentity()
    {
        return identity;
    } //-- org.exolab.castor.mapping.FieldDescriptor getIdentity() 

    public java.lang.Class getJavaClass()
    {
        return DetailContent.class;
    } //-- java.lang.Class getJavaClass() 

    public java.lang.String getNameSpacePrefix()
    {
        return nsPrefix;
    } //-- java.lang.String getNameSpacePrefix() 

    public java.lang.String getNameSpaceURI()
    {
        return nsURI;
    } //-- java.lang.String getNameSpaceURI() 

    public org.exolab.castor.xml.TypeValidator getValidator()
    {
        return this;
    } //-- org.exolab.castor.xml.TypeValidator getValidator() 

    public java.lang.String getXMLName()
    {
        return xmlName;
    } //-- java.lang.String getXMLName() 
}

QryODS3Req 类:

package com.descripter;

import org.exolab.castor.xml.Marshaller;
import org.exolab.castor.xml.Unmarshaller;

public class QryODS3Req {
	private String CARD_NO;

	public String getCARD_NO() {
		return CARD_NO;
	}

	public void setCARD_NO(String cARD_NO) {
		CARD_NO = cARD_NO;
	}
	public static QryODS3Req unmarshal(java.io.Reader reader)
	        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException{
	    return (QryODS3Req) Unmarshaller.unmarshal(QryODS3Req.class, reader);
	} 
	public void marshal(java.io.Writer out)
		        throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException {
		        
		Marshaller.marshal(this, out);
	}
	 public void validate()
		        throws org.exolab.castor.xml.ValidationException
		    {
		        org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator();
		        validator.validate(this);
		    } //-- void validate() 

	public boolean isValid() {
		try {
			validate();
		} catch (org.exolab.castor.xml.ValidationException vex) {
			return false;
		}
		return true;
	} // -- boolean isValid()
}

QryODS3ReqDescriptor 描述类:

/*
 * This class was automatically generated with 
 * <a href="http://www.castor.org">Castor 1.3</a>, using an XML
 * Schema.
 * $Id$
 */

package com.descripter;

  //---------------------------------/
 //- Imported classes and packages -/
//---------------------------------/

/**
 * Class QryODS3ReqDescriptor.
 * 
 * @version $Revision$ $Date$
 */
public class QryODS3ReqDescriptor extends org.exolab.castor.xml.util.XMLClassDescriptorImpl {


      //--------------------------/
     //- Class/Member Variables -/
    //--------------------------/

    private boolean _elementDefinition;

    private java.lang.String _nsPrefix;

    private java.lang.String _nsURI;

    private java.lang.String _xmlName;

    private org.exolab.castor.xml.XMLFieldDescriptor _identity;


      //----------------/
     //- Constructors -/
    //----------------/

    public QryODS3ReqDescriptor() {
        super();
        _xmlName = "QryODS3Req";
        _elementDefinition = true;
        
        //-- set grouping compositor
        setCompositorAsSequence();
        org.exolab.castor.xml.util.XMLFieldDescriptorImpl  desc           = null;
        org.exolab.castor.mapping.FieldHandler             handler        = null;
        org.exolab.castor.xml.FieldValidator               fieldValidator = null;
        //-- initialize attribute descriptors
        
        //-- initialize element descriptors
        
        //-- _CARD_NO
        desc = new org.exolab.castor.xml.util.XMLFieldDescriptorImpl(java.lang.String.class, "CARD_NO", "CARD_NO", org.exolab.castor.xml.NodeType.Element);
        desc.setImmutable(true);
        handler = new org.exolab.castor.xml.XMLFieldHandler() {
            public java.lang.Object getValue( java.lang.Object object ) 
                throws IllegalStateException
            {
                QryODS3Req target = (QryODS3Req) object;
                return target.getCARD_NO();
            }
            public void setValue( java.lang.Object object, java.lang.Object value) 
                throws IllegalStateException, IllegalArgumentException
            {
                try {
                    QryODS3Req target = (QryODS3Req) object;
                    target.setCARD_NO( (java.lang.String) value);
                } catch (java.lang.Exception ex) {
                    throw new IllegalStateException(ex.toString());
                }
            }
            public java.lang.Object newInstance(java.lang.Object parent) {
                return null;
            }
        };
        desc.setSchemaType("string");
        desc.setHandler(handler);
        desc.setRequired(true);
        desc.setMultivalued(false);
        addFieldDescriptor(desc);
        addSequenceElement(desc);
        
        //-- validation code for: _CARD_NO
        fieldValidator = new org.exolab.castor.xml.FieldValidator();
        fieldValidator.setMinOccurs(1);
        { //-- local scope
            org.exolab.castor.xml.validators.StringValidator typeValidator;
            typeValidator = new org.exolab.castor.xml.validators.StringValidator();
            fieldValidator.setValidator(typeValidator);
            typeValidator.setWhiteSpace("preserve");
            typeValidator.setMaxLength(32);
        }
        desc.setValidator(fieldValidator);
    }


      //-----------/
     //- Methods -/
    //-----------/

    /**
     * Method getAccessMode.
     * 
     * @return the access mode specified for this class.
     */
    public org.exolab.castor.mapping.AccessMode getAccessMode(
    ) {
        return null;
    }

    /**
     * Method getIdentity.
     * 
     * @return the identity field, null if this class has no
     * identity.
     */
    public org.exolab.castor.mapping.FieldDescriptor getIdentity(
    ) {
        return _identity;
    }

    /**
     * Method getJavaClass.
     * 
     * @return the Java class represented by this descriptor.
     */
    public java.lang.Class getJavaClass() {
        return QryODS3Req.class;
    }

	/**
	 * Method getNameSpacePrefix.
	 * 
	 * @return the namespace prefix to use when marshaling as XML.
	 */
	public java.lang.String getNameSpacePrefix() {
		return _nsPrefix;
	}

    /**
     * Method getNameSpaceURI.
     * 
     * @return the namespace URI used when marshaling and
     * unmarshaling as XML.
     */
    public java.lang.String getNameSpaceURI(
    ) {
        return _nsURI;
    }

    /**
     * Method getValidator.
     * 
     * @return a specific validator for the class described by this
     * ClassDescriptor.
     */
    public org.exolab.castor.xml.TypeValidator getValidator(
    ) {
        return this;
    }

    /**
     * Method getXMLName.
     * 
     * @return the XML Name for the Class being described.
     */
    public java.lang.String getXMLName(
    ) {
        return _xmlName;
    }

    /**
     * Method isElementDefinition.
     * 
     * @return true if XML schema definition of this Class is that
     * of a global
     * element or element with anonymous type definition.
     */
    public boolean isElementDefinition(
    ) {
        return _elementDefinition;
    }

}

关于castor就总结到这里,有不对的或者错误的地方,欢迎骚扰!(后面的通过类来转换的方法是借鉴前辈的,再此万分感谢!)