Простой пример использования веб-сервиса wsdl с Java? - PullRequest
8 голосов
/ 21 августа 2011

Я пытаюсь использовать веб-сервис WSDL в Java, в конечном итоге это будет плагин Eclipse.

Я могу использовать Файл> Создать> Другой, чтобы выбрать «Клиент веб-службы», который работает, но этогенерирует кучу файлов, которые должны быть изменены / восстановлены при изменении веб-сервиса, что является довольно мусором.

Везде, где я смотрю, я вижу разные способы выполнения действий, но я не могу получить ни один из нихна самом деле делать то, что я хочу.

Вот некоторый код:

String WsdlUrl = "http://localhost:port/path/to/wsdl";

ArrayList<String> args = new ArrayList();
args.add("arg1");
args.add("arg2");
// etc

Webservice ws = setupWebserviceObject( WsdlUrl );
Object result = ws.invoke("methodname",args);

System.out.println(result);

В основном мне нужно изменить "Webservice", "setupWebserviceObject" и "invoke" на все, что работает, безнуждающихся в предварительно сгенерированных классах и с минимумом любого другого раздражающего пуха.

Не кажется, что это должно быть трудно сделать, но до сих пор я не нашел ясного примера того, как это сделать.

Может кто-нибудь помочь?

Ответы [ 3 ]

8 голосов
/ 21 августа 2011

Я полагаю, что понятие "простой" несовместимо со всеми вещами WSDL, но вот несколько примеров:

[Примечание. Ниже я сохранил исходный, неправильно понятый ответ, на случай, если он кому-нибудь поможет.

Эта статья содержит краткое изложение ваших вариантов реализации службы из WSDL: 5 Методы создания веб-сервисов Java из WSDL .

Реализация API провайдера JAX-WS может быть самым простым путем, если вы используете Java 6+.

1 голос
/ 03 февраля 2014

Простой способ, шаг за шагом:

Это было сделано с использованием Apache CXF и Maven управления зависимостями.

1 - Получить дескриптор WSDL службы, сохраненный в файле.Поместите его в папку ресурсов вашего проекта (папка должна быть в списке исходных папок вашего проекта, если вы используете eclipse).

2 - В файле pom.xml объявите зависимости:

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-frontend-jaxws</artifactId>
    <version>2.7.7</version>
</dependency>
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-transports-http</artifactId>
    <version>2.7.7</version>
</dependency>

3 - Используйте следующий плагин Maven для создания классов Java:

    <plugin>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-codegen-plugin</artifactId>
        <version>2.7.7</version>
        <executions>
            <execution>
                <id>generate-sources</id>
                <phase>generate-sources</phase>
                <configuration>
                    <sourceRoot>${project.build.directory}/generated/cxf</sourceRoot>
                    <wsdlOptions>
                        <wsdlOption>
                            <wsdl>${basedir}/resources/WebService.wsdl.xml</wsdl>
                        </wsdlOption>
                    </wsdlOptions>
                </configuration>
                <goals>
                    <goal>wsdl2java</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

4 - Используйте следующий код для совершения вызова:

String methodName = "getSomethingFromMyWebService";
DynamicClientFactory dcf = DynamicClientFactory.newInstance();
Client client = dcf.createClient(ConsumeTest.class.getClassLoader().getResource("WebService.wsdl.xml"));

Object[] res = client.invoke(methodName,parameter1,parameter2, parameterN);
SomethingObject[] somethingObjectList = (SomethingObject[])res[0];
Class.forName(res.getClass().getName()).isArray();
for(SomethingObject so : somethingObjectList){
    // do something!
}

5 - Прибыль!

Примечания: Если метод не возвращает список того, что вы должны привести к объекту, он возвращает вместо него.

0 голосов
/ 22 августа 2011

Я бы порекомендовал использовать инструменты командной строки axis2, наиболее просто:

java2wsdl -cn полностью определенное имя класса

wsdl2java -uri wsdlLocation -ss -sd -uw -g -o outputLocation

cd в outputLocation и запустите муравей

Поместите сгенерированный файл .aar в папку WEB-INF/services, чтобы создать службу (не нужно, если вам просто нужен клиент), и скопируйте сгенерированные заглушки в исходную папку. Вы можете использовать YourServiceSkeleton класс для реализации бизнес-логики и использовать YourServiceStub класс для клиента

...