2013-03-06 1 views
1

안녕하세요, StackOverflow 사용자FreeMarker를 사용하여 Smooks를 사용하여 Java to XML (SOAP)

현재 SOA 프로젝트를 진행 중입니다. 어플리케이션 서버로서 JBoss ESB 4.11이 배치 된 JBoss 5.1을 사용합니다.

나는 클라이언트로부터 SOAP 메시지를 수신하고 SOAP 메시지로 응답을 보내는 웹 서비스를 구현하려고한다.
SOAP 메시지 요청이이 웹 서비스에 수신되면이 요청을 처리 할 수 ​​있도록 Smooks를 사용하여이 메시지를 Java 객체로 변환합니다.
메신저 처리가 끝나면 자바 객체를 Smooks로 다시 XML (SOAP 응답)로 변환하려고합니다.

Java에서 XML 로의 변환에 전념하고 있습니다. jboss-esb.xml 파일
내 액션 체인은 다음과 같다 다음 processRequest 작업이 incomming 요청을 처리 완료

<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd" 
        xmlns:ftl="http://www.milyn.org/xsd/smooks/freemarker-1.1.xsd" 
        xmlns:core="http://www.milyn.org/xsd/smooks/smooks-core-1.4.xsd"> 

<core:filterSettings type="SAX" defaultSerialization="false"/> 

<resource-config selector="example.JavaObjectMessage"> 
    <resource>org.milyn.delivery.DomModelCreator</resource> 
</resource-config> 


<ftl:freemarker applyOnElement="example.JavaObjectMessage"> 
    <!--<ftl:template>/freemarker/acknowledge.flt</ftl:template> --> 
    <ftl:template> 
     <!-- 
     <sg:Message xmlns:sg="urn:http://example"> 
      <sg:MessageType>${.vars[example.JavaObjectMessage].messageType}</sg:MessageType> 
     </sg:Message > 
     --> 
    </ftl:template> 
</ftl:freemarker> 
</smooks-resource-list> 

후에는 attatch합니다 : 두 번째 SmooksAction의

<services> 
    <service name="myWS" description="A Service" category="WS"> 
     <listeners> 
      <jms-listener name="myListener" busidref="myChannel"/> 
     </listeners> 
     <actions mep="RequestResponse" inXsd="in.xsd" outXsd="out.xsd"> 
      <!-- Transform incomming SOAP Message into JavaBean objects --> 
      <action name="xml2java-transform" class="org.jboss.soa.esb.smooks.SmooksAction"> 
       <property name="smooksConfig" value="/smooks/smooks-config-soap2java.xml"/> 
       <property name="resultType" value="JAVA" /> 
      </action> 

      <action name="processRequest" class="example.soa.ProcessRequest" process="process"> 
       <property name="config" value="val"/> 
      </action> 

      <!-- Transform outgoing JavaBean objects into SOAP Message --> 
      <action name="java2xml-transform" class="org.jboss.soa.esb.smooks.SmooksAction"> 
       <property name="smooksConfig" value="/smooks/smooks-config-java2soap.xml"/> 
       <property name="reportPath" value="/smooks/report.html"/> 
       <property name="resultType" value="STRING" /> 
      </action> 
     </actions> 
    </service> 
</services> 

smooksConfig

은 다음과 같습니다 esb 메시지에 대한 example.JavaObjectMessage 클래스. 따라서 두 번째 SmooksAction은이 객체에 액세스 할 수 있습니다.

제 질문은 : smooksConfig의 'example.JavaObjectMessage'속성에 어떻게 액세스 할 수 있습니까? 그리고 flt:tamplate 섹션에서 applyOnElement은 무엇을 의미합니까?

이미 Smooks 사용자 가이드를 읽었으며 JBoss 커뮤니티에서도이 질문을 게시했습니다.

도움이되었습니다.

감사

답변

1

나는 마침내 문제를 해결! 나는 JavaSmooksAction으로 XML으로 변환하는 방법의 메커니즘을 이해하는 데 어려움을 겪었으며 여전히 모든 것을 이해하지 못한다. 내가 한 어쨌든 무슨

했다 : 1.
SAX 필터가 자바 객체의 패키지 이름과 XML 문서를 만들 것이다,
2. 알아 볼 수있는 smooks-config.xml 파일 내의 SAX 필터에 대해 자세히 살펴했다 루트 엘리먼트와 모든 애트리뷰트를 자식 엘리먼트로 정의한다.
3. SAX 필터로 만든 XML 문서를 사용하여 가상 개체 (이 경우 HashMap)를 만들 수 있습니다.
4.

<?xml version="1.0" encoding='UTF-8'?> 
<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd" 
        xmlns:ftl="http://www.milyn.org/xsd/smooks/freemarker-1.1.xsd" 
        xmlns:jb="http://www.milyn.org/xsd/smooks/javabean-1.2.xsd" 
        xmlns:core="http://www.milyn.org/xsd/smooks/smooks-core-1.4.xsd"> 

<resource-config selector="global-parameters"> 
    <param name="stream.filter.type">SAX</param> 
</resource-config> 

<jb:bean beanId="message" class="java.util.HashMap" createOnElement="example.JavaObjectMessage"> 
    <jb:value property="messageType" decoder="String" data="example.JavaObjectMessage/messageType"/> 
</jb:bean> 

<ftl:freemarker applyOnElement="example.JavaObjectMessage"> 
    <ftl:template> 
    <!--  
     <sg:Message xmlns:sg="urn:http://message"> 
      <sg:MessageType>${message.messageType}</sg:MessageType> 
     </sg:Message> 
    --> 
    </ftl:template> 
</ftl:freemarker> 
</smooks-resource-list> 

전에 설명 된 바와 같이 : 먼저 SAX 필터를 사용, 두 번째 가상 객체를 생성 HashMap은 다음

그래서 내 smooks-config.xml 파일은 다음과 지금 보이는 프리 마커 템플릿에 대한 입력으로 사용할 수 있습니다 (이 경우 HashMap), 셋째 : 자유 마커로 템플릿 작성