1

この呼び出しで XML を暗号化しようとしています:

XMlCipher.martial(Document context,ReferenceList referenceList)

このため、プロジェクトは xmlsec-1.5.3.jar を参照しています

コードをビルドして weblogic サーバーに正常にデプロイできましたが、実行後にログに次のエラーが表示されます。

Caused by: java.lang.NoSuchMethodError: 
org.apache.xml.security.encryption.XMLCipher.martial(Lorg/w3c/dom/Document;Lorg/apache/xml/security/encryption/ReferenceList;)Lorg/w3c/dom/Element;
at com.ally.util.encryption.EncryptionUtil.generateEncryptedXML(EncryptionUtil.java:381)
at com.ally.util.encryption.EncryptionUtil.getEnryptedXMLDocument(EncryptionUtil.java:443)
at com.ally.partner.fis.acctinq.FISSoapHandler.getFISEncryptedHeader(FISSoapHandler.java:154)
4

2 に答える 2

0

Maven や SoapUI の使用について言及されていないことは承知java.lang.NoSuchMethodError: org.apache.xml.security.encryption.XMLCipher.setSecureValidationしていますが、soapui-maven-plugin を使用しようとすると同様の例外 ( ) が発生し、解決策を投稿して役に立てば幸いです。

私にとっての修正は、次のように pom.xml 内の soapui-maven-plugin に xml-security 依存関係を追加することでした。

<!-- To run, enter this command from the module directory:  mvn soapui:test -->
<build>
 <plugins>
    <plugin>
        <groupId>com.smartbear.soapui</groupId>
        <artifactId>soapui-maven-plugin</artifactId>
        <version>5.1.1</version>
        <dependencies>
            <dependency>
                <groupId>org.apache.santuario</groupId>
                <artifactId>xmlsec</artifactId>
                <version>1.5.2</version>
            </dependency>
        </dependencies>
        <configuration>
            <projectFile>src/test/soap-ui/your-soapui-xml-file.xml</projectFile>
        </configuration>
    </plugin>
</plugins>

私の場合、プロジェクトの他の場所に xml セキュリティ依存関係はありませんでした。

他のケースでは、プロジェクト全体に複数の xml セキュリティ依存関係があるためにこのエラーが発生しているようです (そして、1 つの回答が既に暗示しているように、それらは競合しています)。そのため、上記の修正がそのシナリオでうまくいかない場合は、プロジェクトのどの依存関係に xml セキュリティが含まれているかを調べ、含めるものと除外するものを決定する必要があります (たとえば、Maven の指定された pom で除外または提供されたスコープ マーキング)。

于 2016-05-24T14:26:33.123 に答える
0

XMlCipherこの種のエラーは、クラスパスにの参照が複数ある場合に常に発生します。これは、別の jar 内のの複製xmlsec.jarまたは別のインスタンスである可能性があります。XMlCipher

問題をデバッグするには、いくつかのオプションがあります。

  • war ファイルを編集して、重複する jar や異なるバージョンのXMlCipherクラスを削除します。
  • を使用して weblogic 管理対象サーバーに接続しjconsole、クラスパスを確認します。xmlsec.jar の別のインスタンスが含まれていることに気付いたかどうかを確認してください

weblogic.xml で次のように指定して、.war/.ear ファイル内に存在するクラスのインスタンスを優先するように weblogic に指示する必要がある場合があります。

<container-descriptor>
    <prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>

<wls:container-descriptor>
     <wls:prefer-application-packages>
         <wls:package-name>org.apache.xml.security.*</wls:package-name>
     </wls:prefer-application-packages>
</wls:container-descriptor>

詳細および同様の質問については、ドキュメントを参照してください: Weblogic 10.3.1.0 is using com.bea.core.apache.commons.net_1.0.0.0_1-4-1.jar... I want to use commons-net-2.0私のコードからの.jar

于 2014-12-02T17:21:25.283 に答える