我正在使用以下命令在JEE容器之外启动一个简单的Web服务:
Endpoint.publish(endpoint, ws);
在代码级别,Web服务由一个接口和一个具体的类组成。
为了更好地了解事物的工作方式,我首先构建了完整的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中将'token'指定为必填项,但如果在操作调用中省略令牌,则不会出现任何错误
如果我在标记中写入任何字符串字符,则不会收到任何格式错误的异常错误,而是WS正常运行。但是WSDL的其余部分都可以正确验证,如果我用其他名称更改操作名称,则WS无法启动。
总体而言,似乎完全忽略了s:schema中的内容...