Resolução de classe XPath no JBoss5
Estou tendo dificuldades para descobrir de onde vem o problema, por isso estou postando isso na esperança de que outros possam ter encontrado algo semelhante a isso em outros lugares e tenham a gentileza de compartilhar suas idéias.
Estou usando umJBoss 5.0.1.GA servidor de aplicativos em execução em cima de umSun Java 1.6.0-13 JDK. Para o arquivo WAR no serviço da Web gerado, eu uso umAxis2 1.4 Mecanismo WS cujos arquivos JAR são inseridos porEclipse Galileo no projetoWEB-INF/lib
diretório ao criar o serviço da Web a partir da classe "worker" fornecida no Dynamic Web Project. O trecho de código relevante a seguir:
String sUrl = "http://example.com/datafile.xml";
String sPath = "/some/xpath/string";
InputStream input = new URL(sUrl).openStream();
InputSource source = new InputSource(input);
DocumentBuilderFactory docFact = DocumentBuilderFactory.newInstance();
docFact.,setNamespaceAware(false);
DocumentBuilder parser = docFact.newDocumentBuilder();
Document doc = parser.parse(source);
XPath xpath = XPathFactory.newInstance().newXPath();
// error occurs here:
String result = (String) xpath.evaluate(path,doc,XPathConstants.STRING);
input.close();
Este é o erro que estou recebendo no log do JBoss:
java.lang.LinkageError: violação de restrição do carregador: ao resolver o campo "STRING", o carregador de classes (instância de org / jboss / classloader / spi / base / BaseClassLoader) da classe de referência, javax / xml / xpath / XPathConstants e a classe loader (instância de <bootloader>) para o tipo resolvido do campo, javax / xml / namespace / QName, tem objetos de classe diferentes para esse tipo
I poderia use oXPath.evaluate(String,Document)
- no entanto, há ocasiões em que preciso obter (por exemplo) umXPathConstants.NODESET
em vez disso, é proibido. Eu também tentei me atrapalhar um pouco, jogando lixojboss-web.xml
arquivos aqui e ali no arquivo WAR, mas sem efeito.
O que estou tentando entender é:
De onde poderia estar vindo o erro? O carregador de classes do JBoss? Alguma interação estranha entre o JBoss e o Sun JDK? Alguma estranheza introduzida pelo Eclipse ao criar o serviço da Web? Talvez alguma confusão introduzida pelas bibliotecas Axis2 implantadas no WAR?Encontrei instâncias de arquivos de classe compilados no que parece um golpe triplo:Sun JDK (arquivort.jar
);Bibliotecas JBoss ($JBOSS_HOME/lib/endorsed/stax-api.jar
); eBibliotecas implementadas no Axis2 ($JBOSS_HOME/server/deploy/MyProject.ear/MyProject.war/WEB-INF/lib/axis2-saaj-api-1.4.jar
ewoden-impl-dom-1.0M8.jar
)Como exatamente eu devo configurar o JBoss para dizer em quais classes está correto carregar as "outras" bibliotecas? Especificamente, ojaxax.xml.namespace.QName
Isso está causando sofrimento.Agradeço antecipadamente.