Appel service Web axis2 du client xfire: La référence de point final (EPR) pour l'opération non trouvée

StackOverflow https://stackoverflow.com/questions/2301548

Question

Je dois appeler axis2 service Web avec WS-Security (jeton nom d'utilisateur) de XFire client sur https. Je pourrais faire l'exercice par xfire client dynamique , mais pas de chance avec le client de base wsdl (c.-à générer stub java de WSDL). Quelqu'un pourrait me signaler ce qui pourrait être erroné (stub, quelque chose d'autre ws-sécurité)?

Exception:

  

Exception dans le thread "principal"   org.codehaus.xfire.XFireRuntimeException:   Impossible invoquer le service .. Nested   exception   org.codehaus.xfire.fault.XFireFault:   La référence de point d'extrémité (EPR) pour le   L'opération n'a pas trouvé est    https: // localhost / services / DataServiceSample2   et l'action WSA =   org.codehaus.xfire.fault.XFireFault:   La référence de point d'extrémité (EPR) pour le   L'opération n'a pas trouvé est    https: // localhost / services / DataServiceSample2   et l'action WSA =

Code:

public static void main(String[] args) throws MalformedURLException {
    ProtocolSocketFactory easy = new EasySSLProtocolSocketFactory();
    Protocol protocol = new Protocol("https", easy, 9443);
    Protocol.registerProtocol("https", protocol);

    ObjectServiceFactory serviceFactory = new ObjectServiceFactory();
    serviceFactory.setStyle("message");
    Service serviceModel = serviceFactory.create(DataServiceSample2PortType.class);
    XFireProxyFactory factory = new XFireProxyFactory();
    DataServiceSample2PortType service = (DataServiceSample2PortType) factory.create(serviceModel, "https://localhost:9443/services/DataServiceSample2");
    Client client = Client.getInstance(service);
client.addOutHandler(new DOMOutHandler());

    Properties properties = new Properties();
    properties.setProperty(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
    properties.setProperty(WSHandlerConstants.USER, "admin");
    properties.setProperty(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
    properties.setProperty(WSHandlerConstants.PW_CALLBACK_CLASS, PasswordHandler.class.getName());
    client.addOutHandler(new WSS4JOutHandler(properties));

    sab.TopCustomerResponse topCustomersInCalifornia = service.topCustomersInCalifornia(null);
}
Était-ce utile?

La solution 2

Il me manque paramètre « SOAPAction » en-tête HTTP. Vous pouvez définir directement comme

HttpsURLConnection conn;
...
conn.setRequestProperty("SOAPAction", "urn:executeXml");

dans le client AFAIK XFire il pourrait être archivé de telle manière:

    Map m = new HashMap();
    m.put("SOAPAction", "urn:executeXml");
    client.setProperty(CommonsHttpMessageSender.HTTP_HEADERS, m);

Autres conseils

S'il vous plaît essayez de remplacer localhost avec l'adresse IP de la machine où votre service est en cours d'exécution. Au lieu de

factory.create(serviceModel,"https://localhost:9443/services/DataServiceSample2");

Vous pouvez spécifier l'adresse IP comme ceci

factory.create(serviceModel,"https://192.168.2.18:9443/services/DataServiceSample2");

S'il vous plaît noter qu'il est considéré comme une mauvaise pratique de code d'expédition avec des paramètres ambigus. Donc, après l'avoir testé, vous devrez remplacer l'adresse IP codées en dur avec une variable qui peut être facilement configuré.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top