Как избежать необходимости указывать расположение WSDL в клиенте веб-сервиса, созданном CXF или JAX-WS?

Вы совершенно правы, что существует проблема там, но для большинства случаев существует ровное простое решение, чем другие ответы (до сих пор) сделали предложение. Можно продолжить использовать новый и удалить свободно - все, что необходимо сделать, новая перегрузка, и удалите для каждого класса в библиотеке, которой можно было бы пользоваться через границы DLL.

Лично, я просто определил простой класс для обеспечения необходимой функциональности:

class NewDelete
{
    public:
        void *operator new (size_t size);
        void operator delete (void *memory);
        void *operator new (size_t size, void *ptr);
        void operator delete (void *memory, void *ptr);
};

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

157
задан Donal Fellows 21 November 2011 в 15:16
поделиться

1 ответ

@Martin решение Devillers хорошо работает. Для полноты, обеспечивая шаги ниже:

  1. Помещенный Ваш wsdl для выделения ресурсов на каталог как: src/main/resource
  2. В файле англичанина, добавьте и wsdlDirectory и wsdlLocation (не отсутствуйте / в начале wsdlLocation), как ниже. В то время как wsdlDirectory используется, чтобы сгенерировать код, и wsdlLocation используется во времени выполнения для создания динамического прокси.

    <wsdlDirectory>src/main/resources/mydir</wsdlDirectory>
    <wsdlLocation>/mydir/my.wsdl</wsdlLocation>
    
  3. Затем в Вашем коде Java (с конструктором без аргументов):

    MyPort myPort = new MyPortService().getMyPort();
    
  4. Вот полная часть генерации кода в файле англичанина с быстрым API в сгенерированном коде.

    <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxws-maven-plugin</artifactId>
    <version>2.5</version>
    
    <dependencies>
        <dependency>
            <groupId>org.jvnet.jaxb2_commons</groupId>
            <artifactId>jaxb2-fluent-api</artifactId>
            <version>3.0</version>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.ws</groupId>
            <artifactId>jaxws-tools</artifactId>
            <version>2.3.0</version>
        </dependency>
    </dependencies>
    
    <executions>
        <execution>
            <id>wsdl-to-java-generator</id>
            <goals>
                <goal>wsimport</goal>
            </goals>
            <configuration>
                <xjcArgs>
                    <xjcArg>-Xfluent-api</xjcArg>
                </xjcArgs>
                <keep>true</keep>
                <wsdlDirectory>src/main/resources/package</wsdlDirectory>
                <wsdlLocation>/package/my.wsdl</wsdlLocation>
                <sourceDestDir>${project.build.directory}/generated-sources/annotations/jaxb</sourceDestDir>
                <packageName>full.package.here</packageName>
            </configuration>
        </execution>
    </executions>
    

0
ответ дан 23 November 2019 в 21:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: