Я использую cxf-codegen-plugin v. 3.2.4 в проекте maven. WSDL относится к схеме:
<xsd:import namespace="http://mynamespace/"
schemaLocation="../schema/MySchema.xsd"/>
Но когда сгенерированный Сервер запускается, опубликованный wsdl ссылается на схему следующим образом:
<xsd:import namespace="http://mynamespace/" schemaLocation="http://localhost:9999/?xsd=1"/>
И этот сгенерированный xsd изменил имена аргументов для данного метода. Исходная схема имеет следующее определение:
<xs:complexType name="myMethod">
<xs:sequence>
<xs:element name="messageHeader" type="tns:soapMessageHeader" minOccurs="0"/>
<xs:element name="myId" type="xs:string" minOccurs="0"/>
<xs:element name="mySecondId" type="xs:string" minOccurs="0"/>
<xs:element name="myThirdId" type="xs:string" minOccurs="0"/>
<xs:element name="password" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
В то время как сгенерированная схема имеет следующее:
<xs:complexType name="myMethod">
<xs:sequence>
<xs:element name="arg0" type="tns:soapMessageHeader" minOccurs="0"/>
<xs:element name="arg1" type="xs:string" minOccurs="0"/>
<xs:element name="arg2" type="xs:string" minOccurs="0"/>
<xs:element name="arg3" type="xs:string" minOccurs="0"/>
<xs:element name="arg4" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
Он изменил имена элементов с определенных на "arg0", "arg ...". Мне нужно, чтобы этого не было.
В моем помпе есть это:
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${cxf.version}</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${source.wsdl.path}</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/resources/wsdl/MyServiceDefinition.wsdl</wsdl>
<extraargs>
<extraarg>-impl</extraarg>
<extraarg>-verbose</extraarg>
</extraargs>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
Автоматически сгенерированный интерфейс для сервиса имеет аннотацию @WebParam.
Кто-нибудь может мне помочь?
2 ответа
В http://www.benmccann.com/web-services-tutorial -with-apache-cxf автор указывает на использование атрибута аннотации endpointInterface для соблюдения аннотаций внутри автоматически сгенерированного интерфейса (самим cxf):
@WebService(endpointInterface = "com.company.auth.service.AuthService",
serviceName = "corporateAuthService")
Эта альтернатива не требует дополнительной настройки xml.
Документация Tomcat EE дает нам законченный пример: http://tomee.apache.org/examples -trunk / простой вебсервис
Еще один вопрос о stackoverflow, который может быть связан: jax-ws относительно интерфейса конечной точки
Я только что понял: хотя сгенерированный интерфейс для службы имеет аннотацию @WebParam, соответствующий конкретный класс, реализующий EndPoint, не имеет ее. Я подумал, что это не проблема, поскольку в интерфейсе есть аннотация. Затем я попытался добавить их к параметрам и вуаля! Сгенерированный xsd внезапно выходит правильно, и я могу прочитать параметры!
Новые вопросы
cxf
Apache CXF помогает вам создавать и разрабатывать сервисы с использованием API-интерфейсов программирования внешнего интерфейса, таких как JAX-WS и JAX-RS. Эти сервисы могут поддерживать различные протоколы, такие как SOAP, XML / HTTP, RESTful HTTP или CORBA, и работать с различными транспортными средствами, такими как HTTP, JMS или JBI.