У меня очень простой (существующий) веб-сервис, который я хотел бы создать клиент веб-службы против использования JDK8.
Я использую чистую цепочку инструментов JDK8, то есть я использую инструмент wsimport из своего каталога JDK8.
Теперь к проблеме: исходный код Java, созданный средством wsimport в JDK8, не соответствует JDK8 Javadoc. Как вам известно, инструмент Javadoc стал гораздо более строгим в JDK8.
Рассмотрим следующую простую схему:
<xs:schema version="1.0" targetNamespace="http://mavenwsserver.ws.mytest.org/">
<xs:element name="operation" type="tns:operation"/>
<xs:element name="operationResponse" type="tns:operationResponse"/>
<xs:complexType name="operation">
<xs:sequence>
<xs:element name="person" type="tns:person" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="person">
<xs:sequence>
<xs:element name="firstName" type="xs:string" minOccurs="0"/>
<xs:element name="lastName" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="operationResponse">
<xs:sequence>
<xs:element name="return" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
Для этого инструмент wsimport генерирует код Java следующим образом:
package org.mytest.ws.mavenwsclient;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;
/**
* <p>Java class for person complex type.
*
* <p>The following schema fragment specifies the expected content contained within this class.
*
* <pre>
* <complexType name="person">
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element name="firstName" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
* <element name="lastName" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "person", propOrder = {
"firstName",
"lastName"
})
public class Person {
protected String firstName;
protected String lastName;
/**
* Gets the value of the firstName property.
*
* @return
* possible object is
* {@link String }
*
*/
public String getFirstName() {
return firstName;
}
/**
* Sets the value of the firstName property.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setFirstName(String value) {
this.firstName = value;
}
/**
* Gets the value of the lastName property.
*
* @return
* possible object is
* {@link String }
*
*/
public String getLastName() {
return lastName;
}
/**
* Sets the value of the lastName property.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setLastName(String value) {
this.lastName = value;
}
}
Проблема - это сгенерированные комментарии для этого класса. Хотя этот тип комментариев будет принят компилятором Javadoc в JDK7, он больше не работает в JDK8. (конец > должен быть заменен на >
, чтобы он был правильным в JDK8). Результатом этих недопустимых комментариев является то, что сборка завершилась неудачей.
Я знаю, что могу отключить doclint в JDK8, но мне интересно, не делаю ли я что-то неправильно здесь. Это просто чистые инструменты JDK8. Ничего особенного. Предполагается, что эти инструменты будут работать вместе? и были тщательно протестированы друг с другом перед выпуском Oracle? Поэтому я предполагаю, что я делаю что-то неправильно. Как что?
Спасибо.
ШАГИ ДЛЯ ВОСПРОИЗВЕДЕНИЯ
Ссылка на WSDL (включает схему)
Загрузите этот файл где-нибудь на вашем жестком диске.
Я использую командную строку wsimport
следующим образом:
mkdir D:\JavaDevHG\MavenWSClient\target\generated-sources\jaxws-wsimport
"C:\Program Files\Java\jdk1.8.0_05\bin\wsimport" -keep ^
-s D:\JavaDevHG\MavenWSClient\target\generated-sources\jaxws-wsimport ^
D:/JavaDevHG/MavenWSClient/src/main/wsdl/myWSDL.xml
Теперь запустите javadoc
в сгенерированных источниках:
"C:\Program Files\Java\jdk1.8.0_05\bin\javadoc" ^
-sourcepath D:\JavaDevHG\MavenWSClient\target\generated-sources\jaxws-wsimport ^
-subpackages org
Вы увидите что-то вроде этого:
Loading source files for package org.mytest.ws.mavenwsserver...
Constructing Javadoc information...
Standard Doclet version 1.8.0_05
Building tree for all the packages and classes...
Generating .\org\mytest\ws\mavenwsserver\HelloWorldWebService.html...
...
...
Generating .\org\mytest\ws\mavenwsserver\Person.html...
..\..\..\target\generated-sources\jaxws-wsimport\org\mytest\ws\mavenwsserver\Person.java:15: error: bad use of '>'
* <complexType name="person">
^
..\..\..\target\generated-sources\jaxws-wsimport\org\mytest\ws\mavenwsserver\Person.java:16: error: bad use of '>'
* <complexContent>
...
... ^
Обратите внимание, что инструмент Javadoc также создает кучу ПРЕДУПРЕЖДЕНИЙ. Я могу жить с этим. Это ОШИБКИ, которые делают сборку неудачной.