Единый WSDL без импорта схемы в WebLogic с JAX-WS

Как я могу настроить веб-сервис, сгенерированный WebLogic 10.3.6 с использованием JAX-WS, для включения схемы объекта в одно объявление файла WSDL вместо объявления импорта?

Пример кода:

Интерфейс

import javax.ejb.Local;

@Local
public interface CustomerBeanLocal {

    public void updateCustomer(Customer customer);

}

Сеанс Бин

import javax.ejb.Stateless;
import javax.jws.WebService;

@Stateless
@WebService
public class CustomerBean implements CustomerBeanLocal {

    @Override
    public void updateCustomer(Customer customer) {
        // Do stuff...
    }   

}

WSDL генерируется

Нам нужно, чтобы определения схемы не импортировались с <xsd:import> тег в приведенном ниже примере, но должен быть объявлен внутри WSDL, что означает, что вся информация о контракте находится в одном файле WSDL. Нет зависимостей от других файлов.

<!-- ... -->

<types>
  <xsd:schema>
  <xsd:import namespace="http://mybeans/" schemaLocation="http://192.168.10.1:7001/CustomerBean/CustomerBeanService?xsd=1" /> 
  </xsd:schema>
</types>

<!-- ... -->

Тот же код с WildFly включает в себя типы схем внутри WSDL и не использует функцию импорта. После некоторых исследований я не нашел способа настроить bean/ сервер для этого в WebLogic (не нашел JAX-WS или проприетарных функций WebLogic для этого).

Я понимаю преимущества наличия экспортируемой схемы (возможность повторного использования и т. Д.), Но в проекте требуется, чтобы типы были объявлены внутри WSDL, а не импортированы.

2 ответа

Решение

Используете ли вы предоставленный wsgen-инструмент для wsdl-поколения? Если да, есть параметр с именем:

-inlineSchemas

который именно то, что вы хотите.

"Используется для встраивания схем в сгенерированный wsdl. Должен использоваться вместе с параметром -wsdl. "(Источник: https://jax-ws.java.net/nonav/2.2.1/docs/wsgen.html)

Вы можете автоматизировать wsgen с помощью jaxws-maven-plugin, В последней версии плагина используется jaxws 2.2, но если вы укажете target 2.1, сгенерированные артефакты будут совместимы с вашей платформой.

<plugin>
    <groupId>org.jvnet.jax-ws-commons</groupId>
    <artifactId>jaxws-maven-plugin</artifactId>
    <version>2.3</version>
    <executions>
      <execution>
        <id>wsgen</id>
        <phase>process-classes</phase>
        <goals>
          <goal>wsgen</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <sei>...put your WS impl class here...</sei>
      <keep>true</keep>
      <verbose>true</verbose>
      <target>2.1<verbose>
      <genWsdl>true</genWsdl>
      <xnocompile>true</xnocompile>
      <inlineSchemas>true</inlineSchemas>
    </configuration>
  </plugin>

Упакуйте сгенерированный файл WSDL в файл war (по умолчанию в WEB-INF/wsdl), а затем добавьте wsdlLocation в аннотацию.

@WebService(wsdlLocation = 'MyService.wsdl')
Другие вопросы по тегам