Вызов веб-сервиса axis2 из клиента xfire:Ссылка на конечную точку (EPR) для операции не найдена.

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

Вопрос

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

Исключение:

Исключение в потоке "Main" 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 =

Код:

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

Я скучаю "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);

Другие советы

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

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

Вы можете попробовать указать IP-адрес следующим образом

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top