Использование веб-сервиса CXF из Java Web Start - PullRequest
4 голосов
/ 23 декабря 2009

ОБНОВЛЕНИЕ: я отправил свой вопрос в список рассылки пользователя CXF, здесь .

ОБНОВЛЕНИЕ: в настоящее время я подписал все свои банки. Мне все еще не удается настроить CXF таким образом, чтобы он мог найти WSDL. Моей последней попыткой было поместить WSDL в мой файл WAr, чтобы я мог получить к нему доступ через веб-браузер. Я установил wsdllocation внутри клиента на URL (http://www.example.com/app/example.wsdl). Теперь я получаю следующее исключение:

Exception in thread "AWT-EventQueue-0" java.lang.ExceptionInInitializerError
at com.sun.xml.internal.ws.util.xml.XmlUtil.createDefaultCatalogResolver(Unknown Source)
at com.sun.xml.internal.ws.client.WSServiceDelegate.parseWSDL(Unknown Source)
at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(Unknown Source)
at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(Unknown Source)
at com.sun.xml.internal.ws.spi.ProviderImpl.createServiceDelegate(Unknown Source)
at javax.xml.ws.Service.<init>(Unknown Source)

Поиск в Google практически ничего не дал.

Я создаю клиент веб-службы из заданного WSDL с использованием Apache CXF . Я столкнулся с проблемами, однако при попытке получить доступ к службе я получаю следующее исключение:

Can not initialize the default wsdl from ../resource/example.wsdl
Exception in thread "AWT-EventQueue-0" java.security.AccessControlException: access denied (java.util.PropertyPermission user.dir read)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPropertyAccess(Unknown Source)

Я не подписываю свое веб-приложение запуска и предпочел бы не делать этого, поскольку я не обращаюсь к каким-либо ресурсам с компьютера клиента. Упомянутый WSDL упакован в мою банку. Проблема вызвана этим из сгенерированного клиентского кода CXF:

    URL url = null;
    try {
        url = new URL("../resource/example.wsdl");
    } catch (MalformedURLException e) {
        System.err.println("Can not initialize the default wsdl from ../resource/example.wsdl");
        // e.printStackTrace();
    }
    WSDL_LOCATION = url;

Как правильно указать CXF на этот WSDL? Меня также беспокоит аннотация WebService для класса:

@WebServiceClient(name = "Example", 
              wsdlLocation = "../resource/example.wsdl",
              targetNamespace = "http://services.example.com/") 

Мне тоже нужно это изменить?

Ответы [ 2 ]

2 голосов
/ 25 декабря 2009

Вам нужно изменить это wsdlLocation на classpath: reference.

используйте -wsdlLocation, как показано здесь .

1 голос
/ 08 января 2010

После нескольких ошибок и экспериментов мне удалось заставить все работать правильно. Во-первых, УБЕДИТЕСЬ, что cxf.jar и wsdl4j.jar действительно находятся на вашем пути к классам. Я думал, что это подтвердил, но, поскольку я создавал клиент изнутри jar через webstart, который сам по себе был упакован в WAR, я испортил расположение среды выполнения cxf в процессе сборки. Кроме того, при указании местоположения wsdl мне пришлось использовать "classpath:my.wsdl". Я облегчил себе задачу и просто поместил wsdl в то же место, что и мой источник.

Надеюсь, это поможет кому-то, кто может сделать то же самое в какой-то момент!

...