当前位置: 首页 > 知识库问答 >
问题:

SOAPUI Groovy解析XML响应并将其插入mysql数据库

姜旭
2023-03-14

我是groovy的初学者,正在尝试解析XML并将结果记录插入MySQL数据库示例SOAP XML响应

 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
       <soap:Body>
          <GetCitiesByCountryResponse xmlns="http://www.webserviceX.NET">
             <GetCitiesByCountryResult><NewDataSet>
      <Table>
        <Country>British Indian Ocean Territory</Country>
        <City>Diego Garcia</City>
      </Table>
      <Table>
        <Country>India</Country>
        <City>Ahmadabad</City>
      </Table>
      <Table>
        <Country>India</Country>
        <City>Akola</City>
      </Table>
    </NewDataSet></GetCitiesByCountryResult>
          </GetCitiesByCountryResponse>
       </soap:Body>
    </soap:Envelope>

SOAPUI GROOVY teststep脚本

import groovy.sql.Sql
def sql = Sql.newInstance('jdbc:mysql://localhost:3306/weather', 'root', 'security', 'com.mysql.jdbc.Driver') 
def response = context.expand( '${GetCitiesByCountry#Response}' )
def xml = new XmlSlurper().parseText(response).Body.GetCitiesByCountryResponse.GetCitiesByCountryResult.NewDataSet.Table
//log.info xml
xml.each{ node -> 
    sql.execute("INSERT INTO indcit(country,city) VALUES (?,?)" ,[node.Country, node.City])
    //sql.execute("INSERT INTO indcit(country,city) VALUES (${node.Country},${node.City})")
    //log.info node.Country
    //log.info node.City
    }
Thu Mar 03 01:16:36 IST 2016:ERROR:java.sql.SQLException: Invalid argument value: java.io.NotSerializableException
   java.sql.SQLException: Invalid argument value: java.io.NotSerializableException
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
    at com.mysql.jdbc.PreparedStatement.setSerializableObject(PreparedStatement.java:3415)
    at com.mysql.jdbc.PreparedStatement.setObject(PreparedStatement.java:3066)
    at groovy.sql.Sql.setObject(Sql.java:3655)
    at groovy.sql.Sql.setParameters(Sql.java:3620)
    at groovy.sql.Sql.getPreparedStatement(Sql.java:3881)
    at groovy.sql.Sql.getPreparedStatement(Sql.java:3928)
    at groovy.sql.Sql.execute(Sql.java:2287)
    at groovy.sql.Sql$execute.call(Unknown Source)
    at Script62$_run_closure1.doCall(Script62.groovy:7)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:272)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:909)
    at groovy.lang.Closure.call(Closure.java:411)
    at groovy.lang.Closure.call(Closure.java:427)
    at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:1325)
    at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:1297)
    at org.codehaus.groovy.runtime.dgm$148.doMethodInvoke(Unknown Source)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1085)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:909)
    at groovy.lang.DelegatingMetaClass.invokeMethod(DelegatingMetaClass.java:149)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:39)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:54)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
    at Script62.run(Script62.groovy:6)
    at com.eviware.soapui.support.scripting.groovy.SoapUIGroovyScriptEngine.run(SoapUIGroovyScriptEngine.java:92)
    at com.eviware.soapui.impl.wsdl.teststeps.WsdlGroovyScriptTestStep.run(WsdlGroovyScriptTestStep.java:141)
    at com.eviware.soapui.impl.wsdl.panels.teststeps.GroovyScriptStepDesktopPanel$RunAction$1.run(GroovyScriptStepDesktopPanel.java:250)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

提前感谢您的任何帮助!

共有1个答案

汝飞
2023-03-14

尝试在节点上调用text(),即:

sql.execute("INSERT INTO indcit(country,city) VALUES (?,?)" ,[node.Country.text(), node.City.text()])
 类似资料:
  • 问题内容: 我正在将数据插入MySQL数据库,以防万一如果插入失败,我需要给出一条适当的错误消息来指示。根据下面的代码,如果插入成功或失败,我将收到消息。 我要做的是仅在数据插入成功时才回显消息,如果失败则返回。我该如何修改我的代码? 问题答案:

  • 问题内容: 我想在我的MySQL数据库中插入整数188和90,但以下代码不起作用: 为什么不起作用? 问题答案: 编辑 为我工作: 在MySQL表;

  • 我是一个初学者,我想用Python写一个不和谐的机器人。我已经连接到我的数据库,我从数据库中获取数据,但我不知道如何将数据发送到discord服务器通道。

  • 由于某种原因,我遇到了一个解析错误。我把范围缩小到“什么”,而不是“为什么”。 以下是我的测试脚本: 通过上面的测试xml字符串,我得到了“无法…”条件然而,当我取出“”时,它工作了!显然simplexml_load_string()有一些细节。但我收到了这个带有的响应,我不想首先执行查找/替换脚本。 还有,我这样做对吗?最后,我需要开始解析CUS帐户,提取其中的数据。

  • 问题内容: 我有一个应用程序,我想从excel读取数据,将其插入数据库,然后为特定用户生成pdf报告。我进行了很多搜索,但没有具体说明这两种情况。 问题答案: 使用PHPExcel库读取Excel文件并将数据传输到数据库中 一切都变得非常取决于您的数据库以及如何在其中构造数据

  • 问题内容: 通讯: 但是我想通过Ajax将我的电子邮件插入数据库。我不希望页面被重定向,因为每次刷新页面时,都会将空值插入数据库。 我只希望我的电子邮件通过Ajax插入数据库,然后再发送电子邮件,即 应该消失,并且应该有“您已成功订阅”行。 任何简短的代码将非常有用..预先感谢您:) 问题答案: 尝试这个: 和在 不要使用已弃用的。 实际上,如果您的问题是将空值插入数据库,则尝试此操作,这里不需要