如何添加 WSDL 以编程方式进行限制?

发布于 2024-08-06 11:05:02 字数 945 浏览 4 评论 0 原文

在我工作的地方,我们制定了一项政策,规定我们应该尝试“自下而上”(代码优先)构建 Web 服务。

执行此操作时,如何在 XSD > WSDL 元素中添加限制?例如,如下所示:

import javax.jws.WebService;
import javax.xml.ws.BindingType;

@WebService
@BindingType(javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING)
public class ProofOfConcept {

    public String sayHello(String guest){
        return "Hello "+guest;
    }
}

我的 WSDL 中的输出如下:

...
<xs:complexType name="sayHello">
    <xs:sequence>
        <xs:element minOccurs="0" name="arg0" type="xs:string" />
    </xs:sequence>
</xs:complexType>
...

我想向“guest”字符串添加 minLengthmaxLength 限制。这是否可以通过代码来完成,而不是直接编辑 WSDL?

我知道我可以使用自定义类并使用 @XmlElement@XmlAttribute 注释我的字段来获得一些自定义项(名称、必需等),但什么也没有特定于诸如字符串之类的东西(长度等);是否可以修改/扩展这些注释以添加对长度或模式等内容的支持?

谢谢。

Where I work, we have a policy in place that states we should try to build web services "bottom-up" (code-first).

When doing this, how can I add restrictions within my XSD <types> WSDL element? For example, in the following:

import javax.jws.WebService;
import javax.xml.ws.BindingType;

@WebService
@BindingType(javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING)
public class ProofOfConcept {

    public String sayHello(String guest){
        return "Hello "+guest;
    }
}

The output in my WSDL is as such:

...
<xs:complexType name="sayHello">
    <xs:sequence>
        <xs:element minOccurs="0" name="arg0" type="xs:string" />
    </xs:sequence>
</xs:complexType>
...

I would like to add both minLength and maxLength restrictions to the "guest" String. Is this possible to do through code as opposed to editing the WSDL directly?

I'm aware that I can use a custom class and annotate my fields with @XmlElement or @XmlAttribute to get a few customizations (name, required etc.), but nothing specific for something like a String (length etc.); is it possible to modify / extend those annotations to add support for something like length or pattern?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦行七里 2024-08-13 11:05:02

我发现有趣的是,您的策略是尝试自下而上构建 Web 服务,因为我建议自上而下构建 Web 服务,以便清晰地定义契约。无论如何......

我不知道使用注释的具体解决方案,并且我发现您在搜索中也没有找到解决方案。如果您希望自动化该过程以避免每次重新生成 WSDL 时覆盖对模式的更改,您可以向生成的 WSDL 添加 XSL 转换以添加这些属性。虽然不是理想的解决方案,但它应该允许您设置属性并继续工作。

I find it interesting that your policy is to try to build Web services bottom-up as I recommend building Web services top-down in order to cleanly define the contract. At any rate...

I'm not aware of a specific solution using annotations and I see that you haven't found one in your search either. If you want to automate the process so as to avoid overwriting your changes to the schema every time you regenerate the WSDL you can add an XSL transform to the resulting WSDL to add these attributes. While not an ideal solution it should allow you to set the attributes and continue working.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文