5

XMLtoXML.javaというクラスがあり、これはそのメソッドの1つです...

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

public Object[] process(Object data) {

    String templateXML = null;
    Object result[] = null;
    String inputxml = null;
    String templateNumber = null;
    Iterator iterator = null;
    String scenarioConfigUrl = null;
    Node inputNode;
    Node outputNode;
    String subTemplateXML = null;
    String outputXml = null;

    if (delay != null) {

        long time = Long.parseLong(delay);
        try {
            Thread.sleep(time);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    inputxml = (String) metadata.get(Constants.REQUEST);
    if (inputxml == null) {
        throw new NullRecordException("input data to XMLtoXML class  in   
      metadata map is null");
    }
    Document inputXMLDocument = Dom4jUtils.getDocument(inputxml);

コードブロックの最後の行はdom4jDocument.iを使用しています。クラスパスにdom4j-full.jarがあります。このクラスをスタンドアロンとして実行すると(EclipseでJavaアプリケーションとして実行)、正常に動作します。このクラスをWebアプリケーションの一部として追加し、クラスパスにdom4j-full.jarを追加すると。
次の例外が発生しました。

java.lang.NoClassDefFoundError: org/dom4j/Document
   at org.jaxen.dom4j.DocumentNavigator.getDocumentNode(DocumentNavigator.java:346)
   at org.jaxen.expr.DefaultAbsoluteLocationPath.evaluate
    (DefaultAbsoluteLocationPath.java:102)

   at org.jaxen.expr.DefaultXPathExpr.asList(DefaultXPathExpr.java:102)
   at org.jaxen.BaseXPath.selectNodesForContext(BaseXPath.java:674)
   at org.jaxen.BaseXPath.selectNodes(BaseXPath.java:213)
   at org.jaxen.BaseXPath.selectSingleNode(BaseXPath.java:234)
   at org.dom4j.xpath.DefaultXPath.selectSingleNode(DefaultXPath.java:156)
   at org.dom4j.tree.AbstractNode.selectSingleNode(AbstractNode.java:188)
   at org.amdocs.convert.XMLtoXML.process(XMLtoXML.java:134)
   at org.openadaptor.core.node.Node.processSingleRecord(Node.java:148)
   at org.openadaptor.core.node.Node.process(Node.java:170)
   at org.openadaptor.core.node.ProcessorNode.process(ProcessorNode.java:96)
   at org.openadaptor.core.router.AbstractRouter.process(AbstractRouter.java:239)
   at org.openadaptor.core.router.AbstractRouter.process(AbstractRouter.java:223)
   at org.openadaptor.core.router.AbstractRouter.processResponse(AbstractRouter.java:249)
   at org.openadaptor.core.router.AbstractRouter.process(AbstractRouter.java:239)
   at org.openadaptor.core.router.AbstractRouter.process(AbstractRouter.java:223)
   at org.openadaptor.core.router.AbstractRouter.process(AbstractRouter.java:180)
   at org.openadaptor.core.adaptor.Adaptor.process(Adaptor.java:285)
   at org.openadaptor.core.node.Node.callChainedMessageProcessor(Node.java:213)
   at org.openadaptor.core.node.Node.process(Node.java:199)
   at org.openadaptor.core.node.ReadNode.process(ReadNode.java:241)
   at org.openadaptor.core.node.ReadNode.run(ReadNode.java:196)
   at java.lang.Thread.run(Thread.java:619)

また、dom4jjarがクラスパスに存在することも確信しています。誰かが問題について何か考えがありますか?

4

2 に答える 2

4

とのdom4j-full.jar両方が含まれているように見えます。あなたのスタックトレースから、クラスパスにあることがわかり、見つけることができますが、探しても見つかりません。ロードされたjaxenは、何らかの理由で、アプリケーションサーバーのクラスパス内にある別のものではなく(もちろんEclipseにはありません)、おそらく別のクラスローダーからロードされたと思います。共有ライブラリなどにがあるかもしれません。dom4jjaxendom4jjaxenjaxendom4jdom4jdom4j-full.jarjaxen.jar

于 2012-01-25T13:29:59.733 に答える
3

org.dom4jスタックトレースは、他のクラスが存在し、使用されていることを明確に示しています。したがって、ライブラリのバージョンが競合しているようです。

dom4jバージョンとjaxenバージョンは相互に互換性がある必要があります。

それらのバージョンを、スタンドアロンモードで適切に機能するバージョンと比較します。

于 2012-01-25T11:59:03.407 に答える