环境:servicemix3.3 + sun 的 JDBC组件 + file 组件 

我想实现的功能是:通过jdbc组件,写一个wsdl文件,读取数据库表person,把得到的记录生成一个xml文件,最后读取这个xml文件写入另 
一张表person_bak中,现在的情况是可以读取person记录,也可以生成一个xml文件,但是在读取xml文件写入到person_bak表 
中时,产生异常,数据不能写入。 


wsdl文件如下: 


<?xml version="1.0" encoding="UTF-8"?> 
<definitions name="jdbc-example" 
  xmlns="http://schemas.xmlsoap.org/wsdl/"; 
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"; 
  xmlns:jdbc="http://schemas.sun.com/jbi/wsdl-extensions/jdbc/"; 
  xmlns:ns="http://j2ee.netbeans.org/xsd/tableSchema"; 
  xmlns:tns="http://www.njusoft.com/datachange/jdbc"; 
  targetNamespace="http://www.njusoft.com/datachange/jdbc";> 

  <!--http://esbinaction.com/chapter6/jdbc--> 
  <!-- import the types which represent the table in the database --> 
  <types> 
    <xsd:schema> 
      <xsd:import namespace="http://j2ee.netbeans.org/xsd/tableSchema"; 
        schemaLocation="PERSON.xsd" /> 
    </xsd:schema> 
  </types> 

  <!-- define the messages which are sent and returned from this 
service --> 
  <message name="inputMsg"> 
    <part name="part" element="ns:PERSON" /> 
  </message> 
  <message name="insertRetMsg"> 
    <part name="part" type="xsd:int" /> 
  </message> 
  <message name="outputMsg"> 
    <part name="part" element="ns:PERSON" /> 
  </message> 

  <!-- define the operations for the interfaces --> 
  <portType name="jdbcInsertPortType"> 
    <operation name="insert"> 
      <input name="inputInsert" message="tns:inputMsg" /> 
      <output name="outputInsert" message="tns:insertRetMsg" /> 
    </operation> 
  </portType> 
  <portType name="jdbcPollerPortType"> 
    <operation name="pollrecords"> 
      <input name="inputPoll" message="tns:inputMsg" /> 
      <output name="outputPoll" message="tns:outputMsg" /> 
    </operation> 
  </portType> 

  <!-- define the binding/implementation for the interface definition 
--> 
  <binding name="insertBinding" type="tns:jdbcInsertPortType"> 
    <jdbc:binding /> 
    <operation name="insert"> 
      <jdbc:operation/> 
      <input name="inputInsert"> 
        <jdbc:input PKName="ID" TableName="PERSON_BAK" 
Transaction="NOTransaction" 
          operationType="insert" paramOrder="id, name, processed" 
          sql="INSERT into PERSON_BAK (id, name, processed) values 
(?,?,?)" /> 
      </input> 
      <output name="outputInsert"> 
        <jdbc:output returnPartName="part" /> 
      </output> 
    </operation> 
  </binding> 

 <!-- define the binding/implementation for the interface definition -- 
> 
  <binding name="pollerBinding" type="tns:jdbcPollerPortType"> 
    <jdbc:binding /> 
    <operation name="pollrecords"> 
      <jdbc:operation /> 
      <input name="inputPoll"> 
        <jdbc:input PKName="ID" PollMilliSeconds="5000" 
          PollingPostProcessing="MarkColumn" 
MarkColumnName="PROCESSED" 
          MarkColumnValue="2" TableName="PERSON" numberOfRecords="2" 
          operationType="poll" Transaction="NOTransaction" 
          sql="SELECT * FROM PERSON where processed =  0" /> 
      </input> 
      <output name="outputPoll"> 
        <jdbc:output returnPartName="part" /> 
      </output> 
    </operation> 
  </binding> 

  <!-- define the service with two ports --> 
  <service name="jdbc-service"> 
    <port name="insertPort" binding="tns:insertBinding"> 
      <jdbc:address jndiName="java:comp/env/jdbc/defaultDS" /> 
    </port> 
    <port name="pollerPort" binding="tns:pollerBinding"> 
      <jdbc:address jndiName="java:comp/env/jdbc/defaultDS" /> 
    </port> 
  </service> 
</definitions> 


这个是对表person的描述格式。 
相应的描述文件person.xsd如下: 
<?xml version="1.0" encoding="UTF-8"?> 
  <xsd:schema elementFormDefault="qualified" targetNamespace="http:// 
j2ee.netbeans.org/xsd/tableSchema" xmlns="http://j2ee.netbeans.org/xsd/
tableSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema";> 
    <xsd:element name="PERSON" type="PERSON"></xsd:element> 
    <xsd:complexType name="PERSON"> 
      <xsd:sequence maxOccurs="unbounded"> 
        <xsd:element name="ID" type="xsd:string"></xsd:element> 
        <xsd:element name="NAME" type="xsd:string"></xsd:element> 
        <xsd:element name="PROCESSED" type="xsd:boolean"></ 
xsd:element> 
      </xsd:sequence> 
    </xsd:complexType> 
  </xsd:schema> 


读取person表中记录,生成的xml文件servicemix-24532545.xml如下: 
<?xml version="1.0" encoding="UTF-8"?> 
<jbi:message xmlns:jbi="http://java.sun.com/xml/ns/jbi/wsdl-11-
wrapper" 
        xmlns:msgns="http://www.njusoft.com/datachange/jdbc"; 
name="inputPoll" 
        type="msgns:inputMsg" version="1.0"> 
<jbi:part> 
        <PERSON xmlns="http://j2ee.netbeans.org/xsd/tableSchema";> 
                <PERSON_Record> 
                        <ID>1</ID> 
                        <NAME>mysqlservicemixdb1</NAME> 
                        <PROCESSED>0</PROCESSED> 
                </PERSON_Record> 
        </PERSON> 
</jbi:part> 
</jbi:message> 

可以看出,servicemix-24532545.xml和上面的person.xsd相比,多个<PERSON_Record>属性。 
我测试过了,如果把<PERSON_Record>删除,则,servicemix可以通过file组件读取 
servicemix-24532545.xml,并且插入该条记录到表person_bak中。 

希望各位老大,可以帮帮我,怎么才能实现文件的完全写入。 
-- 
View this message in context: 
http://www.nabble.com/servicemix-store-database----tp23051689p23051689.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.

Reply via email to