2017-01-31 3 views
0

J'essaie d'utiliser XPath dans mon application Web Saxon 9.7.0-14 EE et xmlbeans-2.6.0/xmlbeans-xpath-2.6.0saxon 9.7 et XMLBeans/XPath

Movement mov = (Movement) XPathUtils.executeQueryNoResultNull(message.getPayload(), "//trx:Movement [@tipo='RESTO']"); 

avec

public static XmlObject executeQueryNoResultNull(XmlObject source, String query) { 
     XmlObject[] results = source.selectPath(DECLARE_NS + "$this" + query); 
     if (results.length == 0) { 
      return null; 
     } else { 
      return results[0]; 
     } 
    } 

et j'ai cette erreur

java.lang.RuntimeException: Trying XBeans path engine... Trying XQRL... Trying XDK... Trying delegated path engine... FAILED on declare namespace trx='http://www.test.com/xxx/xx/trx';$this//trx:Movement[@tipo='RESTO'] 
    at org.apache.xmlbeans.impl.store.Path.getCompiledPath(Path.java:185) 
    at org.apache.xmlbeans.impl.store.Path.getCompiledPath(Path.java:136) 
    at org.apache.xmlbeans.impl.store.Cursor._selectPath(Cursor.java:902) 
    at org.apache.xmlbeans.impl.store.Cursor.selectPath(Cursor.java:2634) 
    at org.apache.xmlbeans.impl.values.XmlObjectBase.selectPath(XmlObjectBase.java:476) 
    at org.apache.xmlbeans.impl.values.XmlObjectBase.selectPath(XmlObjectBase.java:460) 

Est ce que le XMLBeans problème? Puis-je utiliser uniquement Saxon et supprimer XMLBeans?

Voici mon module.xml

<?xml version="1.0" encoding="UTF-8"?> 
<module xmlns="urn:jboss:module:1.1" name="app-common"> 
    <resources> 
     <resource-root path="jsr173_1.0_api.jar"/> 
     <resource-root path="resolver.jar"/> 
     <resource-root path="xbean_xpath.jar"/> 
     <resource-root path="saxon9ee.jar"/> 
     <resource-root path="saxon9-dom.jar"/> 
     <resource-root path="xmlbeans-2.6.0.jar"/> 
+0

Ce message indique généralement que les classes Saxon ne sont pas trouvées. Cela vaut la peine de vérifier que les fichiers jar sont réellement installés là où ils doivent être et que les noms des fichiers jar dans les valeurs 'path' de votre module.xml correspondent aux noms réels des fichiers jar dans le fichier. système de fichiers. Il se peut également que vous deviez vous assurer que la version Saxon correspond à ce que les docs XMLBeans disent qu'elle devrait être. – sideshowbarker

+0

Les fichiers JAR semblent être corrects et je les ai dans le répertoire du module JBoss. Regarder ici https://wiki.apache.org/xmlbeans/XmlBeansFaq#whatJars semble que Saxon 9.7 n'est pas supporté par XMLBeans. Ai-je tort ? – user817057

+0

Voici mon répertoire de modules JBoss http://imageshack.com/a/img924/9306/K0MIpI.png – user817057

Répondre

0

Je ne suis pas expert sur XMLBeans, mais je me demande si le problème est que l'expression "XPath" en question

declare namespace trx='http://www.test.com/xxx/xx/trx';$this//trx:Movement[@tipo='RESTO']

n'est pas true XPath (à cause de 'declare namespace') et donc ne fonctionne pas avec un moteur XPath tiers?

+0

Celui-ci fonctionne par exemple Mouvement mov = (Mouvement) XPathUtils.executeQueryNoResultNull (message.getPayload(), "// trx: Mouvement"); .... les problèmes semblent être "[@ tipo = 'RESTO']" – user817057

+0

Qu'est-ce qui vous fait penser que le problème est le prédicat (qui est valide XPath) plutôt que la déclaration de l'espace de noms (qui ne l'est pas)? –