【问题标题】:RESTful Webservice - How to provide custom Classes' .xsd in xml outputRESTful Webservice - 如何在 xml 输出中提供自定义类的 .xsd
【发布时间】:2011-10-06 10:50:24
【问题描述】:

我已经搜索了一天半,但找不到任何有用的答案... (无论如何,我知道我肯定知道如何编写网络服务:D)

这是我的情况: 我正在尝试设置一个提供返回对象名称 Greeting 的 RESTful Webservices 环境:

Greeting.class

@XmlRootElement(name = "greeting")
public class Greeting {

    private String message;
    private String name;

    public Greeting() {
    }

    public Greeting(String message, String name) {
        this.message = message;
        this.name = name;
    }

    @XmlElement
    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    @XmlElement
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Web 服务只返回一个 Greeting 实例……仅此而已!

GreetingService.class

@Path("sayHello")  
public class GreetingService {
      @Context
      private UriInfo context;
      public GreetingService() {
      }

      @GET
      @Produces("application/xml")
      public Greeting getJson(@QueryParam("name") String name) {
          return new Greeting(getGreeting(), name);
      }

      private String getGreeting() {
          return "Good " + (Calendar.getInstance().get(Calendar.AM_PM) == Calendar.AM ? "Morning" : "Afternoon");
      }
} 

在浏览器中的结果是这样的 浏览器

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<greeting>
    <message>Good Afternoon</message>
</greeting>

没有关于 Greeting.class 的详细结构的信息 :( 但是其他与 web 服务对话的客户可能需要它(是的,这很简单——但这只是一个例子!)

我需要配置什么吗?也许是application.wadl?我不知道-就像我说的那样在谷歌上搜索-将近两天:( 请帮我! 顺便说一句 - 我正在使用 Netbeans、Java 7、JEE6 和 Jersey


编辑

也许我没问对... 如何自动为 Greeting 提供所需的 .xsd 架构?

这里是application.wadl,目前提供...

<application xmlns="http://research.sun.com/wadl/2006/10">
<doc xmlns:jersey="http://jersey.java.net/" jersey:generatedBy="Jersey: 1.8 06/24/2011 12:17 PM"/>
    <resources base="http://localhost/iOSWebServices/resources/">
        <resource path="greeting">
            <method id="greet" name="GET">
                <response>
                    <representation mediaType="application/xml"/>
                </response>
            </method>
            <method id="putXml" name="PUT">
                <request>
                    <representation mediaType="application/xml"/>
                </request>
            </method>
        </resource>
    </resources>
</application>

我发现,响应表示中必须有一个参数“元素” - 我该如何设置它?是的,我可以使用 Netbeans 的 WADL 插件并手动输入 - 但我必须为元素添加模式引用 - 在本例中为“Greeting” - 我仍然不知道如何为 Greeting 设置命名空间。正确分类:(


编辑

我可能已经找到了我正在寻找的东西.. http://www.verborgh.be/articles/2009/11/21/easy-restfull-jax-rs-webservices-and-extended-wadl-on-glassfish-v3-using-ant-/ 这篇文章解释了我想知道的:) 在覆盖 WADL 生成的最后一步仍然有一个异常,但我认为这是一个版本错误 - 将尝试更新球衣或找到解决方法!

【问题讨论】:

  • 不确定您的问题/问题到底是什么?
  • 也许我没问对...如何自动为 Greeting 提供所需的 .xsd 架构?
  • 如果你使用 NetBeans 7 我建议使用向导,将 getGreeting 添加到自动创建的 GreetingFacadeREST 类中,然后查看结果:netbeans.org/kb/docs/websvc/rest.html
  • 结果绝对是我​​不想要的:( .xml 中没有类似 meber 类型的信息等。我想为使用的客户提供额外的 .xsd webservice,他们可以重建类,这些类是由一些 web 服务方法返回的

标签: java web-services rest xsd


【解决方案1】:

由于您使用的是 NetBeans IDE,以下可能会有所帮助:

【讨论】:

  • 很明显,WADL 文档(可能,并且在实践中肯定)包含相关的 XML 模式作为其自身的一部分。
【解决方案2】:

有一个JAXB模式生成工具schemagen可以自动为java类生成XSD。

http://download.oracle.com/javaee/5/tutorial/doc/bnbah.html

【讨论】:

  • 我也在搜索中发现了该工具 - 如果我使用它,我仍然不知道如何将 .xsd 绑定到我的 java 类或生成的 xml。你能告诉我怎么做吗?
【解决方案3】:

我可能已经找到了我正在寻找的东西..http://www.verborgh.be/articles/2009/11/21/easy-restfull-jax-rs-webservices-and-extended-wadl-on-glassfish-v3-using-ant-/ 这篇文章解释了我想知道的内容:) 在覆盖 WADL 生成的最后一步仍然有一个异常,但我认为,这是一个版本错误 -会尝试更新球衣或找到解决方法!

【讨论】:

    猜你喜欢
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 2016-02-06
    相关资源
    最近更新 更多