2016-02-08 3 views
-1

я получаю JSON сообщений для моей mule flow так:Mule - Преобразование XML в SOAP-сообщение

{ 
    "book": { 
    "author": "Gambardella, Matthew", 
    "title": "XML Developer's Guide", 
    "genre": "Computer", 
    "price": "44.95", 
    "publish_date": "2000-10-01", 
    "description": "An in-depth look XML" 
    } 
} 

А потом я использую JSON to XML transformer с мула и возвращает:

<book > 
     <author>Gambardella, Matthew</author> 
     <title>XML Developer's Guide</title> 
     <genre>Computer</genre> 
     <price>44.95</price> 
     <publish_date>2000-10-01</publish_date> 
     <description>An in-depth look XML</description> 
    </book> 

Это мой фактический поток мула:

HTTP ->JSON To XML ->Logger ->WS Consumer

Я хочу, чтобы преобразовать эту XML to SOAP сообщение Добавление URI и префикс.

Зачем мне нужен префикс и сообщение SOAP? Мне нужно отправить на веб-службу и отправить следующим образом:

... 
    <pref:author>Gambardella, Matthew</pref:author> 
... 

Я пытался добавить XSLT component но вернуть мне ошибку, когда я использую : или &#x3a; (Hex-код).

Я думал использовать Dataweave (Mapper) component, но он работает только с Mule Enterprise Edition.

Это результат, который я хочу:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/" xmlns:pref="URI_SOAP_WS"> 
<soap:Body> 
    <pref:book> 
      <pref:author>Gambardella, Matthew</pref:author> 
      <pref:title>XML Developer's Guide</pref:title> 
      <pref:genre>Computer</pref:genre> 
      <pref:price>44.95</pref:price> 
      <pref:publish_date>2000-10-01</pref:publish_date> 
      <pref:description>An in-depth look XML</pref:description> 
     </pref:book> 
</soap:Body> 
</soap:Envelope> 

Каков наилучший способ сделать это преобразование?

+0

Ваш вопрос не ясен. Укажите точный результат, который вы ожидаете получить, включая URI пространства имен. –

+0

@ michael.hor257k Извините, я только что отредактировал сообщение, чтобы немного поучиться – gtx911

+0

Теперь сообщение кажется ясным. Downvoters, позаботьтесь, чтобы удалить downvote? Этот вопрос мне очень помог. – vikingsteve

ответ

3

Следующая таблица стилей:

XSLT 1,0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:pref="URI_SOAP_WS"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/"> 
    <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/" xmlns:pref="URI_SOAP_WS"> 
     <soap:Body> 
      <xsl:apply-templates/> 
     </soap:Body> 
    </soap:Envelope> 
</xsl:template> 

<xsl:template match="*"> 
    <xsl:element name="pref:{local-name()}"> 
     <xsl:apply-templates/> 
    </xsl:element> 
</xsl:template> 

</xsl:stylesheet> 

при нанесении на вашем примере XML, будет возвращать:

<?xml version="1.0" encoding="UTF-8"?> 
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/" xmlns:pref="URI_SOAP_WS"> 
    <soap:Body> 
     <pref:book> 
     <pref:author>Gambardella, Matthew</pref:author> 
     <pref:title>XML Developer's Guide</pref:title> 
     <pref:genre>Computer</pref:genre> 
     <pref:price>44.95</pref:price> 
     <pref:publish_date>2000-10-01</pref:publish_date> 
     <pref:description>An in-depth look XML</pref:description> 
     </pref:book> 
    </soap:Body> 
</soap:Envelope> 
+0

Спасибо! Я использовал компонент XSLT с mule и XSL, которые вы публикуете, и он отлично работает! – gtx911

+0

Спасибо! Хотя 'xmlns: soap =" http://schemas.xmlsoap.org/soap/envelope/ "часто верен – vikingsteve