Вызов веб-службы axis2 из клиента xfire: ссылка на конечную точку (EPR) для операции не найдена - PullRequest
0 голосов
/ 20 февраля 2010

Мне нужно вызвать веб-сервис axis2 с ws-security (токен имени пользователя) из клиента xfire через https. Я мог бы выполнить упражнение через динамический клиент xfire , но не повезло с базовым клиентом wsdl (т.е. сгенерировать заглушку Java из wsdl). Кто-нибудь может указать мне, что может быть не так (заглушка, ws-security что-то еще)?

Исключение:

Исключение в теме "главная" org.codehaus.xfire.XFireRuntimeException: Не удалось вызвать службу. Вложенный исключение org.codehaus.xfire.fault.XFireFault: Ссылка на конечную точку (EPR) для Операция не найдена https://localhost/services/DataServiceSample2 и WSA Action = org.codehaus.xfire.fault.XFireFault: Ссылка на конечную точку (EPR) для Операция не найдена https://localhost/services/DataServiceSample2 и WSA Action =

Код:

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);
}

Ответы [ 2 ]

0 голосов
/ 02 октября 2011

Мне не хватает параметра "SOAPAction" в заголовке HTTP. Вы можете установить его прямо как

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

AFAIK в клиенте XFire может быть заархивирован таким образом:

    Map m = new HashMap();
    m.put("SOAPAction", "urn:executeXml");
    client.setProperty(CommonsHttpMessageSender.HTTP_HEADERS, m);
0 голосов
/ 23 февраля 2010

Пожалуйста, попробуйте заменить localhost на ip-адрес компьютера, на котором работает ваша служба. Вместо

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

Вы можете попробовать указать IP-адрес, как это

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

Обратите внимание, что отправка кода с неоднозначными параметрами считается плохой практикой. Поэтому после тестирования вам нужно будет заменить жестко закодированный IP-адрес на некоторую переменную, которую можно легко настроить.

...