web-dev-qa-db-fra.com

Impossible de créer la méta-usine SAAJ après le conditionnement en JAR

Pour tester une application, je crée des messages SOAP. Cela fonctionne lorsqu'il est exécuté directement depuis Eclipse (Oxygen.1a) mais après avoir été empaqueté sous forme de pot exécutable (option: empaqueter les bibliothèques requises dans le pot généré). erreur suivante:

javax.xml.soap.SOAPException: Unable to create SAAJ meta-factoryProvider com.Sun.xml.internal.messaging.saaj.soap.SAAJMetaFactoryImpl not found
    at javax.xml.soap.SAAJMetaFactory.getInstance(SAAJMetaFactory.Java:94)
    at javax.xml.soap.MessageFactory.newInstance(MessageFactory.Java:138)

déclenché par:

MessageFactory factory = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL);

Je comprends donc que MessageFactory utilise un package Sun

static private final String DEFAULT_META_FACTORY_CLASS =
    "com.Sun.xml.internal.messaging.saaj.soap.SAAJMetaFactoryImpl";

Mais je ne sais absolument pas pourquoi il est incapable de trouver cette classe après l'empaquetage dans un JAR exécutable. Tous les conseils ou directions seraient grandement appréciés.

12
Hakello

J'ai ajouté ce qui suit dépendance à mon projet:

<dependency>
    <groupId>com.Sun.xml.messaging.saaj</groupId>
    <artifactId>saaj-impl</artifactId>
    <version>1.5.0</version>
</dependency>                

J'ai ensuite créé le fichier META-INF/services/javax.xml.soap.SAAJMetaFactory avec la ligne suivante pour fournir le nom complet de la classe d'usine SAAJ et cela a fonctionné:

com.Sun.xml.messaging.saaj.soap.SAAJMetaFactoryImpl

Le javax.xml.soap.saaj-api semble être abandonné. Et c'est très étrange qu'un paquet nommé com.Sun est celui qui fonctionne. Quoi qu'il en soit, cela fonctionne.

14
Manoel Campos