简体   繁体   English

使用RESTful Web服务和Jersey创建Hello World

[英]Create Hello World with RESTful web service and Jersey

I follow tutorial here on how to create web service using RESTful web service and Jersey and I get kind of stuck. 在这里按照有关如何使用RESTful Web服务和Jersey创建Web服务的教程进行操作,但有点麻烦。 The code is from HelloWorld3 in the tutorial I linked above. 该代码来自我上面链接的教程中的HelloWorld3。 Here is the code. 这是代码。 I use Netbean6.8 + glassfish v3 我使用Netbean6.8 + glassfish v3

RESTGreeting.java create using JAXB . RESTGreeting.java使用JAXB创建。 This class represents the HTML message in Java 此类表示Java中的HTML消息

package com.sun.rest;

import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlElement;


@XmlRootElement(name = "restgreeting")
public class RESTGreeting {
private String message;
private String name;

/**
 * Creates new instance of Greeting
 */
public RESTGreeting() {
}

/* Create new instance of Greeting
 * with parameters message and name
 */
public RESTGreeting(
    String message,
    String name) {
    this.message = message;
    this.name = name;
}

/** Getter for message
 * return value for message
 *
 */
@XmlElement
public String getMessage() {
    return message;
}

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

/* Getter for name
 * return name
 */
@XmlElement
public String getName() {
    return name;
}

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

HelloGreetingService.java creates a RESTful web service that returns an HTML message HelloGreetingService.java创建一个RESTful Web服务,该服务返回HTML消息

package com.sun.rest;

import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.Consumes;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;


@Path("helloGreeting")
public class HelloGreetingService {
@Context
private UriInfo context;

/** Creates a new instance of HelloGreetingService */
public HelloGreetingService() {
}

/**
 * Retrieves representation of an instance of com.sun.rest.HelloGreetingService
 * @return an instance of java.lang.String
 */
@GET
@Produces("text/html")
public RESTGreeting getHtml(@QueryParam("name")
String name) {
    return new RESTGreeting(
        getGreeting(),
        name);
}

private String getGreeting() {
    return "Hello ";
}

/**
 * PUT method for updating or creating an instance of HelloGreetingService
 * @param content representation for the resource
 * @return an HTTP response with content of the updated or created resource.
 */
@PUT
@Consumes("text/html")
public void putHtml(String content) {
}
}

However when i deploy it on Glassfish, and run it. 但是,当我在Glassfish上部署它并运行它时。 It generate an exception. 它产生一个异常。 I try to debug using netbean 6.8, and figure out that this line return new RESTGreeting(getGreeting(), name); 我尝试使用netbean 6.8进行调试,并弄清楚该行return new RESTGreeting(getGreeting(), name); in HelloGreetingService.java cause the exception. HelloGreetingService.java导致异常。 But not sure why. 但不确定为什么。 Here is the stacktrace 这是堆栈跟踪

javax.ws.rs.WebApplicationException
at com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:268)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1029)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:941)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:932)
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:384)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:451)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:632)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:233)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
at java.lang.Thread.run(Thread.java:637)

Your resource method returns an instance of a JAXB-annotated class and will not be able to produce HTML (the example returns HTML in an ordinary java String). 您的resource方法返回一个带有JAXB注释的类的实例,并且将无法生成HTML(该示例以普通的Java String返回HTML)。 Isn't it XML you want? 您想要的不是XML吗? In that case change the annotation on getHtml to 在这种情况下,将getHtml上的注释更改为

@Produces({"application/xml"})

In eclipse 日食

http://www.brucephillips.name/blog/index.cfm/2009/5/28/An-Introduction-to-Creating-RESTful-Web-Services-Using-Jersey-and-Java#comments http://www.brucephillips.name/blog/index.cfm/2009/5/28/An-Introduction-to-Creating-RESTful-Web-Services-Using-Jersey-and-Java#comments

If you are not using maven then place the jars mentioned in WEB-INF/lib folder if lib folder is not preset create one an place the jars. 如果您不使用maven,则将lib提到的jar放在WEB-INF / lib文件夹中(如果没有预先设置lib文件夹),然后在jar上放置一个。

Also make sure the jar version is same as mentioned in the document or else it gives error. 还要确保jar版本与文档中提到的版本相同,否则会出错。

Download the zip file if you dont want to create the application that works great. 如果您不想创建运行良好的应用程序,请下载zip文件。 If you want the JAR files contact me. 如果您想要JAR文件,请与我联系。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM