블로그 이미지
평범하게 살고 싶은 월급쟁이 기술적인 토론 환영합니다.같이 이야기 하고 싶으시면 부담 말고 연락주세요:이메일-bwcho75골뱅이지메일 닷컴. 조대협


Archive»


 

'xmlbeans'에 해당되는 글 2

  1. 2008.12.22 XMLBean (3)
  2. 2008.12.19 SOAP TO REST Convert(Transform)
 

XMLBean

프로그래밍/XML 관련 | 2008.12.22 13:20 | Posted by 조대협
요즘 진행하고 있는 프로젝트 성격상 XML에 관련된 작업이 많습니다.
그중에서 흥미로운것을 하나 발견해서 Posting을 하는데
JAVA2XML 솔루션입니다.

Java2XML 솔루션이란 한마디로 Java ValueObject를 XML 문서로 변환해주거나
XML 문서를 Java ValueObject로 변환해주는 라이브러리들을 이야기 합니다.

XML Scheme가 Class의 데이타 타입을 정의해주는 원리입니다.
예전에는 Castor와 같은 오픈소스 프레임웍들이 유행을 했지만
요즘은 J2EE5부터 JAXB2.0이 들어 있어서 JAXB2.0을 추천할만합니다.
사용법도 쉽고, 성능도 상당히 좋아져서 프로젝트에 사용하기에 무리가 없습니다.

그런데 재미있는 녀석중에 하나가
XMLBeans입니다. JAXB의 경우 JAVA2XML 상호 변환에는 그럭저럭 사용할 수 있겠지만 좀더 고 수준의 데이타 변환 예를 들어 XSLT변환이나 XPath사용, XQuery 사용등을 지원할만큼 Powerful하지는 않습니다.

그에 반해 XMLBeans는 Java2XML을 지원하면서도 위에 언급한 모든 기능을 제공하기 때문에 XML 을 훨씬 더 수월하고 많은 기능으로 다룰 수 있습니다.

XMLBeans의 유례는 BEA에서 WLI(WebLogic Integration)등의 제품 개발을 위해 개발 되었다가 아파치 재단에 기부되어 오픈소스로 운용되고 있는 프레임웍입니다.

실제로도 BEA 제품중 많은 수가 이 XML Bean을 기반으로 합니다. ESB, WebLogic Workshop Framework, WebLogic Integration(EAI)

좀더 고급의 XML 기능들이 필요한 경우에는 한번쯤 살펴 보심이 좋지 않을까 싶습니다.

Apache XML Beans : http://xmlbeans.apache.org/

'프로그래밍 > XML 관련' 카테고리의 다른 글

Soap Handler  (0) 2009.04.17
WebLogic Workshop을 이용한 웹서비스 프로그래밍  (0) 2009.04.17
XMLBean  (3) 2008.12.22
JAX-WS를 이용한 쉬운 웹서비스 개발 방법  (0) 2008.12.12
XML에서 Namespace 제거하는 XSLT  (0) 2008.12.10
XML2JSON Transform XSLT  (0) 2008.12.10
ALSB에서
SOAP 을 REST POX (Plain Old Xml)로 변환하는 XmlBeans 구현 예제. ALSB에서 Java Callout으로 사용이 가능함
==
import javax.xml.namespace.QName;

import org.apache.xmlbeans.XmlCursor;
import org.apache.xmlbeans.XmlObject;
import org.apache.xmlbeans.XmlCursor.TokenType;

public class RESTTransformer {
    public static XmlObject toREST(XmlObject soap){
       
        XmlCursor cur = soap.newCursor();
        cur.toFirstChild();
        cur.toChild(new QName("http://schemas.xmlsoap.org/soap/envelope/","Body"));

        traverse(cur);
        cur.dispose();
        return null;
    }
   
    public static void traverse(XmlCursor cur){
        if(cur.toFirstChild()){
            String name;
            do{
               
                name = cur.getName().getLocalPart();
                System.out.println("<"+name+">");
       
                traverse(cur);
                System.out.println("</"+name+">");

            }while(cur.toNextSibling());

            cur.toParent();
        }else{
            // is Leaf
            System.out.println(cur.getTextValue());
        }
    }
   
==