簡體   English   中英

WSO2 ESB-XML到MySQL數據庫

[英]WSO2 ESB - XML to MySQL Database

我需要一個解決方案:我剛剛為WSO2 ESB嘗試了此示例,並且該示例正在運行: http : //wso2.org/library/articles/2011/01/wso2-esb-example-file-processing

但是我喜歡使用XML文件作為輸入並將其寫入MySQL-DB。 XML文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
  <Name>word</Name>
  <Surname>processor</Surname>
  <Phone>12333</Phone>
</soapenv:Body>
</soapenv:Envelope>

如果我將此文件放入“ in”文件夾,則文件將移至“ out”文件夾,但沒有任何內容寫入數據庫。 沒有錯誤信息。

我的代理服務:

    <proxy xmlns="http://ws.apache.org/ns/synapse" name="FileProxy" transports="vfs" statistics="disable" trace="disable" startOnLoad="true">
   <target>
      <inSequence>
         <log level="full"/>
         <clone>
            <target sequence="fileWriteSequence"/>
            <target sequence="databaseSequence"/>
         </clone>
      </inSequence>
   </target>
   <parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
   <parameter name="transport.PollInterval">15</parameter>
   <parameter name="transport.vfs.MoveAfterProcess">C:/wso2esb/testordner/out</parameter>
   <parameter name="transport.vfs.FileURI">C:/wso2esb/testordner/in</parameter>
   <parameter name="transport.vfs.MoveAfterFailure">C:/wso2esb/testordner/error</parameter>
   <parameter name="transport.vfs.FileNamePattern">.*.xml</parameter>
   <parameter name="transport.vfs.ContentType">text/xml</parameter>
   <parameter name="transport.vfs.ActionAfterFailure">MOVE</parameter>
   <description></description>
</proxy>

而我的序列:

    <?xml version="1.0" encoding="UTF-8"?>
<sequence xmlns="http://ws.apache.org/ns/synapse"
          name="databaseSequence"
          trace="enable"
          statistics="enable">
   <log level="full">
      <property name="sequence" value="before-smooks"/>
   </log>
   <smooks config-key="smooks">
      <input type="xml"/>
      <output type="xml"/>
   </smooks>
   <log level="full">
      <property name="sequence" value="after-smooks"/>
   </log>
   <log level="full">
      <property xmlns:ns="http://org.apache.synapse/xsd"
                name="name"
                expression="//csv-record/name/text()"/>
      <property xmlns:ns="http://org.apache.synapse/xsd"
                name="surname"
                expression="//csv-record/surname/text()"/>
      <property name="phone" value="//csv-record/phone/text()"/>
   </log>
   <iterate xmlns:ns2="http://org.apache.synapse/xsd"
            xmlns:ns="http://org.apache.synapse/xsd"
            xmlns:sec="http://secservice.samples.esb.wso2.org"
            expression="//csv-set/csv-record">
      <target>
         <sequence>
            <log level="full">
               <property name="State" value="Iteration"/>
            </log>
            <log level="full" category="DEBUG"/>
            <dbreport>
               <connection>
                  <pool>
                     <password>passwort</password>
                     <user>esb</user>
                     <url>jdbc:mysql://localhost:3306/</url>
                     <driver>com.mysql.jdbc.Driver</driver>
                  </pool>
               </connection>
               <statement>
                  <sql>insert into info.info (name, surname, phone) values (?, ?, ?)</sql>
                  <parameter expression="//csv-record/name/text()" type="VARCHAR"/>
                  <parameter expression="//csv-record/surname/text()" type="VARCHAR"/>
                  <parameter expression="//csv-record/phone/text()" type="VARCHAR"/>
               </statement>
            </dbreport>
         </sequence>
      </target>
   </iterate>
   <log level="full" category="DEBUG"/>
</sequence>

我以為這將是一個簡單的問題,但我無法解決……就像我說的那樣,它可以使用普通的文本文件,但不能使用XML。 我嘗試了不同的想法,不知道還能嘗試什么...有人知道我的錯誤嗎?

更新:

來自控制台的日志:

[2013-04-12 09:35:55,687]  INFO - DBReportMediator Successfully created data source for jdbc:mysql://localhost:3306/.
[2013-04-12 09:36:10,170]  INFO - LogMediator To: , WSAction: urn:mediate, SOAPAction: urn:mediate, MessageID: urn:uuid:
2CBD1753113A1373101365752170177, Direction: request, Envelope: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope x
mlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body>
  <Name>word</Name>
  <Surname>processor</Surname>
  <Phone>12333</Phone>
</soapenv:Body></soapenv:Envelope>
[2013-04-12 09:36:10,175]  INFO - LogMediator To: , WSAction: urn:mediate, SOAPAction: urn:mediate, MessageID: urn:uuid:
a9252cd8-fe73-4e85-9f41-0842872d3a73, Direction: request, sequence = before-smooks, Envelope: <?xml version='1.0' encodi
ng='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body>
  <Name>word</Name>
  <Surname>processor</Surname>
  <Phone>12333</Phone>
</soapenv:Body></soapenv:Envelope>
[2013-04-12 09:36:10,178]  INFO - LogMediator sequence = fileWriteSequence
[2013-04-12 09:36:10,246]  INFO - LogMediator To: , WSAction: urn:mediate, SOAPAction: urn:mediate, MessageID: urn:uuid:
a9252cd8-fe73-4e85-9f41-0842872d3a73, Direction: request, sequence = after-smooks, Envelope: <?xml version='1.0' encodin
g='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><csv-set/></soapenv
:Body></soapenv:Envelope>
[2013-04-12 09:36:10,249]  INFO - LogMediator To: , WSAction: urn:mediate, SOAPAction: urn:mediate, MessageID: urn:uuid:
a9252cd8-fe73-4e85-9f41-0842872d3a73, Direction: request, name = , surname = , phone = //csv-record/phone/text(), Envelo
pe: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><s
oapenv:Body><csv-set/></soapenv:Body></soapenv:Envelope>
[2013-04-12 09:36:11,254]  WARN - TimeoutHandler Expiring message ID : urn:uuid:4c422f4e-aed5-4eaa-ad9b-e5407db20562; dr
opping message after global timeout of : 120 seconds

fileWriteSequence看起來像這樣:

<?xml version="1.0" encoding="UTF-8"?>
<sequence xmlns="http://ws.apache.org/ns/synapse"
          name="fileWriteSequence"
          trace="enable"
          statistics="enable">
   <log level="custom">
      <property name="sequence" value="fileWriteSequence"/>
   </log>
   <property xmlns:ns2="http://org.apache.synapse/xsd"
             xmlns:ns="http://org.apache.synapse/xsd"
             name="transport.vfs.ReplyFileName"
             expression="fn:concat(fn:substring-after(get-property('MessageID'), 'urn:uuid:'), '.xml')"
             scope="transport"
             type="STRING"/>
   <property name="OUT_ONLY" value="true" scope="default" type="STRING"/>
   <send>
      <endpoint name="FileEpr">
         <address uri="vfs:C:/wso2esb/testordner/out"/>
      </endpoint>
   </send>
</sequence>

煙霧配置:

<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.0.xsd">

  <!--Configure the CSVParser to parse the message into a stream of SAX events. -->
  <resource-config selector="org.xml.sax.driver">
    <resource>org.milyn.csv.CSVParser</resource>
    <param name="fields" type="string-list">name,surname,phone</param>
  </resource-config>

</smooks-resource-list>

我還更改了上面的databaseSequence的代碼。

謝謝。

您的代理服務看起來還不錯。 但我很少擔心。

  1. 為什么將sql查詢作為CDATA。 請在此處查看可用的示例。
  2. 您沒有在連接URL中提到數據庫名稱。 可能不是問題,因為您在sql查詢中使用了database.table格式。
  3. 修復了1和2之后,如果問題仍然存在,請僅按一個順序嘗試使用代理。 即暫時避免文件寫入序列,僅嘗試dbwrite序列。

您還可以在DBReport中介程序之前記錄要插入的條目。 例如,在偽裝中介器之后,放置一個日志中介器,並記錄名稱,姓氏和電話。 這樣可以確保您嘗試插入從消息中正確提取的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM