package com.easyway.stps.bp.handler;import java.io.StringReader;import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import javax.xml.parsers.DocumentBuilderFactory;import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.InputSource;import com.easyway.stps.bp.demo.RailwayDynamicData;
import com.easyway.stps.bp.exception.BPException;/**
 * 
 * @author vipzj
 *
 */
@Component
public class HandlerFactoryBean {

private static final String HANDLER_SUFFIX = "Handler";

@Autowired
private ApplicationContext applicationContext;

@SuppressWarnings("unchecked")
public void process(String bodyMsg){
JAXBContext c;
try {
DocumentBuilderFactory   documentBuilderFactory   =   DocumentBuilderFactory.newInstance();   
StringReader reader = new StringReader(bodyMsg);
        InputSource   inputSource   =   new   InputSource(reader); 
        
        Document   document = documentBuilderFactory.newDocumentBuilder().parse(inputSource);
        //取出第一个节点,判断是什么业务来的
Element root = document.getDocumentElement();
        String rootName = root.getTagName();
        if(rootName.indexOf(":")>0)
         rootName = rootName.substring(rootName.indexOf(":")+1,rootName.length());
        
String dataObjectClassName = rootName + HANDLER_SUFFIX;
DataObjectHandler handler = (DataObjectHandler) applicationContext.getBean(StringUtils.uncapitalize(dataObjectClassName));

c = JAXBContext.newInstance(Class.forName("com.easyway.stps.bp.datasource."+rootName));
Unmarshaller unMarshaller = c.createUnmarshaller();
reader = new StringReader(bodyMsg);
Object data = (Object) unMarshaller.unmarshal(reader);
handler.execute(data); } catch (Exception e) {
e.printStackTrace();
//throw new BPException();
}
}
}

解决方案 »

  1.   

    最烦这种让别人一行代码一行代码教的。你一行代码都看不懂吗?一行代码都看不懂先去买本书看。把语法弄懂了,把相关的api翻翻,再有具体问题再来请教。否则,就算这次告诉你了,下次你看到另外一个函数还是看不懂。要是一口气把东西都扔给别人,干脆和你老板说换个人好了。
      

  2.   

    是一个能用Spring管理的,能处理xml报文的服务类。
      

  3.   

    谢谢iambic,谨记!! 
      

  4.   

    这代码中有涉及 JAXB 的东西,涉及 JAXB 的那块是解编的代码,就是把 XML 解编为对象。
      

  5.   

    其实就是解析xml的东西,然后通过放射等到对象,调用类中的相关方法。