Я запускаю простой веб-сервис вне контейнера JEE с:
Endpoint.publish(endpoint, ws);
На уровне кода веб-сервис состоит из интерфейса и конкретного класса.
ДляДля лучшего понимания того, как все работает, сначала я построил полный WSDL, а затем отразил конфигурацию в классах с обычной конкретной аннотацией.
Это интерфейс с предоставленным wsdl.
@WebService(
serviceName="MyService",
targetNamespace="http://mynamespace.it/",
endpointInterface="it.iservices.MyService",
wsdlLocation="META-INF/wsdl/MyService.wsdl"
)
public interface IPianteGraphicEndpoint {
@WebMethod(operationName="info")
@WebResult(name="details")
public String info(
@WebParam(name="token") String token) throws MyServiceException;
}
Я не публикую реализующий класс, поскольку в нем нет ничего особенного.
Я указал это в wsdl для параметра:
<xs:schema .....>
<!-- Token -->
<xs:simpleType name="token">
<xs:restriction base="xs:string">
<xs:length value="8"></xs:length>
</xs:restriction>
</xs:simpleType>
.....
</xs:schema>
Теперь я столкнулся с несколькими странностями:
при вызове через SoapUI я могу пропустить все, что больше 8, и оно будет принято.Я ожидаю, что будет ошибка
Я указал 'токен' как обязательный в wsdl, но не получаю никакой ошибки, если опускаю токен в вызове операции
если я напишу какой-либо строковый символ в теге, я не получу ни одной ошибки со сформированным исключением, но вместо этого WS работает правильно.Однако остальная часть WSDL проверяется корректно. Если я изменяю имя операции на что-то другое, WS не запускается.
В целом, кажется, что в схеме s: полностьюигнорируется ...