Der Aufruf axis2 Web-Service von xfire Client: Die Endpunkt-Referenz (EPR) für den Betrieb nicht gefunden

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

Frage

Ich brauche axis2 Web-Service mit WS-Security (Benutzername Token) von XFire Client über https nennen. Ich konnte die Übung über xfire dynamischen Client , aber kein Glück mit Wsdl Basis-Client (dh erzeugen Java-Stub von WSDL). Könnte mir jemand Punkt heraus, was falsch sein könnte (Stummel, WS-Security etwas anderes)?

Ausnahme:

  

Exception in thread "main"   org.codehaus.xfire.XFireRuntimeException:   Könnte nicht invoke Service .. Nested   Ausnahme ist   org.codehaus.xfire.fault.XFireFault:   Die Endpunktreferenz (EPR) für das   Der Betrieb wurde nicht gefunden ist    https: // localhost / services / DataServiceSample2   und die WSA Action =   org.codehaus.xfire.fault.XFireFault:   Die Endpunktreferenz (EPR) für das   Der Betrieb wurde nicht gefunden ist    https: // localhost / services / DataServiceSample2   und die WSA Action =

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);
}
War es hilfreich?

Lösung 2

Ich vermisse "SOAPAction" Parameter in HTTP-Header. Man könnte es direkt als

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

AFAIK in XFire Client konnte es in einer solchen Art und Weise archiviert werden:

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

Andere Tipps

Bitte versuchen Sie die localhost mit der IP-Adresse des Computers zu ersetzen, wo Ihr Dienst ausgeführt wird. Statt

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

Sie können versuchen, die IP-Adresse wie diese Angabe

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

Bitte beachten Sie, dass es zu Schiff Code mit mehrdeutigen Parametern schlechte Praxis betrachtet wird. So, nachdem es zu testen, müssen Sie hart codierte IP-Adresse mit einigen Variablen ersetzen, die einfach konfiguriert werden können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top