Castor XML Mapping с тем же именем с дочерним узлом

Я столкнулся с проблемой с Castor при попытке проанализировать XML, который содержит одно и то же имя для родительского и дочернего узла... Вот подробности:

Это часть файла сопоставления:

<class name="com.somepackage.Item">
    <field name="id" type="java.lang.long">
      <bind-xml name="itemiD" node="element"/>
    </field>
    <field name="amount" type="com.somepackage.Amount">
      <bind-xml name="amount" />
    </field>
</class>
<class name="com.somepackage.Amount" >
  <field name="amount" type="java.lang.String">
    <bind-xml name="amount" />
  </field>
  <field name="currency" type="java.lang.String">
    <bind-xml name="currency" />
  </field>
</class>

И это XML, который я пытаюсь разобрать:

<?xml version="1.0" encoding="UTF-8"?>
<list xmlns="http://someurl">
<item>
<itemID>42425</itemID>
<amount>
  <amount>10.00</amount>
  <currency>EUR</currency>
</amount>
<item>
</list>

И это журналы ошибок, связанных с вышеупомянутым материалом:

[# | 2013-11-20T13: 48: 54,670 + 0800 | ИНФО | glassfish3.1.2 | javax.enterprise.system.std.com.sun.enterprise.server.logging | _ThreadID = 32; _ThreadName = резьбы-2; | 13-11-20 13:48:54 ОШИБКА util.XMLConvertUtil http-thread-pool-8181 (1) - org.exolab.castor.xml.MarshalException: недопустимые текстовые данные, найденные как дочерние элементы: количество значения: "10,00" { Файл недоступен]; строка: 14; столбец: 29} org.exolab.castor.xml.MarshalException: недопустимые текстовые данные, найденные как дочерние элементы: значение суммы: "10,00" {Файл: [недоступен]; строка: 14; column: 29} в org.exolab.castor.xml.Unmarshaller.convertSAXExceptionToMarshalException (Unmarshaller.java:761) в org.exolab.castor.xml.Unmarshaller.unmarshal (Unmarshaller.java:727) в org.exolab.cast.Unmarshaller.unmarshal (Unmarshaller.java:616) в some.package.XMLConvertUtil.xmlToObject (XMLConvertUtil.java:58) в some.package.ConverUtil.xmlToPojo (ConverUtil.java:31) в some.packser.X XMLParser.java:89) в some.package.XMLParser.doPost (XMLParser.java:1063) в javax.servlet.http.HttpServlet.service (HttpServlet.java:688) в javax.servlet.http.HttpServlet.Servlet.service (.java: 770) в org.apache.catalina.core.StandardWrapper.service (StandardWrapper.java:1550) в org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:281) в org.apache.catalina. core.StandardContextValve.invoke (StandardContextValve.java:175) в org.apache.catalina.core.StandardPipeline.doInvoke (StandardPipeline.java:655) в org.apache.catalina.core.StandardPipeline.invoke (andardPipeline.java:595) в org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:161) в org.apache.catalina.connector.CoyoteAdapter.doService (CoyoteAdapter.java:331) в org..connector.CoyoteAdapter.service (CoyoteAdapter.java:231) на com.sun.enterprise.v3.services.impl.ContainerMapper $ AdapterCallable.call (ContainerMapper.java:317) на com.sun.enterprise.v3.services.impl.ContainerMapper.service (ContainerMapper.java:195) в com.sun.grizzly.http.ProcessorTask.invokeAdapter (ProcessorTask.java:860) в com.sun.grizzly.http.ProcessorTask.doProcess (ProcessorTask.java75). com.sun.grizzly.http.ProcessorTask.process (ProcessorTask.java:1056) в com.sun.grizzly.http.DefaultProtocolFilter.execute (DefaultProtocolFilter.java:229) в com.sun.grizzly.DefaultProtocolChain.executeProhaCter Java: 137) в com.sun.grizzly.DefaultProtocolChain.execute (DefaultProtocolChain.java:104) в com.sun.grizzly.DefaultProtocolChain.execute (DefaultProtocolCha in.java:90) на com.sun.grizzly.http.HttpProtocolChain.execute (HttpProtocolChain.java:79) на com.sun.grizzly.ProtocolChainContextTask.doCall (ProtocolChainContextTask.java:54) на com.sun.grikly.call (SelectionKeyContextTask.java:59) на com.sun.grizzly.ContextTask.run (ContextTask.java:71) на com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) на com. sun.grizzly.util.AbstractThreadPool $ Worker.run (AbstractThreadPool.java:513) в java.lang.Thread.run(Thread.java:662) Причина: org.xml.sax.SAXException: недопустимые текстовые данные, найденные как дочерние из: сумма значения: "10,00" в org.exolab.castor.xml.UnmarshalHandler.endElement (UnmarshalHandler.java:874) в org.exolab.castor.xml.UnmarshalHandler.endElement (UnmarshalHandler.java:1159) в com.s.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement (AbstractSAXParser.java:601) в com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement (XMLDocumentFrament).java: 1782) на com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl $ FragmentContentDriver.next (XMLDocumentFragmentScannerImpl.java:2938) на com.sun.org.apache.xerces.internal.impl.ner (XMLDocumentScannerImpl.java:648) в com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument (XMLDocumentFragmentScannerImpl.java:511) в com.sun.org.apache.xerces.Xar11.conse.par. (XML11Configuration.java:808) в com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse (XML11Configuration.java:737) в com.sun.org.apache.xerces.internal.parsers.XMLParser.parse (XMLParser.java:119) в com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse (AbstractSAXParser.java:1205) в com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl $ JAX.parse (SAXParserImpl.java:522) at org.exolab.castor.xml.Unmarshaller.unmarshal (Unmarshaller.java:715)... еще 31 причина: org.xml.sax.SAXException: незаконный текст Данные, найденные как дочерние по отношению к: сумму: "10,00" в org.exolab.castor.xml.UnmarshalHandler.endElement (UnmarshalHandler.java:874) в org.exolab.castor.xml.UnmarshalHandler.endElement (UnmarshalHandler.java:11) в com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement (AbstractSAXParser.java:601) в com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement.FanDefment_JD) в com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl $ FragmentContentDriver.next (XMLDocumentFragmentScannerImpl.java:2938) в com.sun.org.apache.xerces.internal.impl.XMLDocumentScanner XML: 648) на com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument (XMLDocumentFragmentScannerImpl.java:511) на com.sun.org.apache.xerces.internal.parsers.XML11Configuration.Conariguration.x: 808) на com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse (XML11Config uration.java:737) на com.sun.org.apache.xerces.internal.parsers.XMLParser.parse (XMLParser.java:119) на com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse (AbstractSAXParser.java:1205) в com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl $ JAXPSAXParser.parse (SAXParserImpl.java:522) в org.exolab.castor.xml.Unmarshallerma.un 715) в org.exolab.castor.xml.Unmarshaller.unmarshal (Unmarshaller.java:616) в some.package.XMLConvertUtil.xmlToObject (XMLConvertUtil.java:58) в some.package.ConverUtil.xmlToPojo:U (Conversion)) в some.package.XMLParser.process (XMLParser.java:89) в some.package.XMLParser.doPost (XMLParser.java:1063) в javax.servlet.http.HttpServlet.service (HttpServlet.java:688) в javax.servlet.http.HttpServlet.service (HttpServlet.java:770) в org.apache.catalina.core.StandardWrapper.service (StandardWrapper.java:1550) в org.apache.catalina.core.StandardWrapperValvejrake (StandardWrake (Valve.rake): 281) в org.apache.catalina.core.Stand ardContextValve.invoke (StandardContextValve.java:175) в org.apache.catalina.core.StandardPipeline.doInvoke (StandardPipeline.java:655) в org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.j) или StandardPipeline.j).apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:161) в org.apache.catalina.connector.CoyoteAdapter.doService (CoyoteAdapter.java:331) в org.apache.catalina.connector.Adapoteapter.java: 231) на com.sun.enterprise.v3.services.impl.ContainerMapper $ AdapterCallable.call (ContainerMapper.java:317) на com.sun.enterprise.v3.services.impl.ContainerMapper.service (ContainerMapper.java: 195) на com.sun.grizzly.http.ProcessorTask.invokeAdapter (ProcessorTask.java:860) на com.sun.grizzly.http.ProcessorTask.doProcess (ProcessorTask.java:757) на com.sun.grizzly.http. ProcessorTask.process (ProcessorTask.java:1056) на com.sun.grizzly.http.DefaultProtocolFilter.execute (DefaultProtocolFilter.java:229) на com.sun.grizzly.DefaultProtocolChain.executePr otocolFilter (DefaultProtocolChain.java:137) в com.sun.grizzly.DefaultProtocolChain.execute (DefaultProtocolChain.java:104) в com.sun.grizzly.DefaultProtocolChain.execute (DefaultProtocolChain.java:90) в com.sun.grizzly.h.HttpProtocolChain.execute (HttpProtocolChain.java:79) при com.sun.grizzly.ProtocolChainContextTask.doCall (ProtocolChainContextTask.java:54) при com.sun.grizzly.SelectionKeyContextTask.call (SelectionKeyContextTask.java:59) в com.sun. gr |#] [# | 2013-11-20T13: 48: 54.671 +0800|INFO|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=32;_ThreadName=Thread-2;| izzly.ContextTask.run (ContextTask.java:71) в com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) в com.sun.grizzly.util.AbstractThreadPool $ Worker. выполнить (AbstractThreadPool.java:513) в java.lang.Thread.run(Thread.java:662) |#]

Это ошибка или какая-то другая проблема, что мне нужно что-то изменить в отображении? Нет никакого способа изменить xml и его схему, поскольку я получаю это от третьей стороны. если нет способа справиться с этим изменением отображения и так далее, я должен использовать другой парсер?

1 ответ

Решение

Я пытался отредактировать вопрос, и у меня недостаточно представителей, чтобы комментировать, но этот вопрос, похоже, совпадает с https://stackru.com/questions/16650013/parsing-with-castor-xml-parser.

Там был сделан комментарий, что castor не может анализировать элементы, у которых дочерний и родительский элементы имеют одинаковые имена. При этом вам придется поменять одно или другое.

Другие вопросы по тегам