【发布时间】:2013-04-09 20:20:40
【问题描述】:
我从 this article 开始了解 Jersey Web 服务,并创建了一个。接下来我要做的是根据从该服务返回的数据在我的网页上填充一个下拉菜单。
但是,每次单击更多按钮时,我都会在运行 Web 服务的控制台上收到此错误消息:
java.lang.IllegalAccessException:com.sun.jersey.server.wadl.generators.WadlGeneratorJAXBGrammarGenerator$8 类无法访问带有修饰符“protected”的 javax.ws.rs.core.Response 类的成员
Service java 代码的简化版本如下所示:
@Path("/abcResource")
public class AbcResource{
@GET
@Path("showAllStr")
@Produces(MediaType.TEXT_PLAIN)
public String[] getAllStr() {
String[] result={"option1", "option2","option3"};
return result
}
//This works!! give me results on http://localhost:8080/rest/abcResource/showAll in browser that shows that service is running fine
@GET
@Path("showAll")
@Produces(MediaType.TEXT_PLAIN)
public String showAllStr() {
String result="blah lblah";
return result
}
}
JavaScript 代码:
<script type="text/javascript">
var offset = 0;
var howMany = 5;
$(document).ready(function() {
$("#btnMore").click(function() {
// fetch some more records from the server side
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "http://localhost:8080/rest/abcResource/showAllStr",
success: onSuccess,
error: onError
});
});
});
function onSuccess(result) {
// process web service return data
// populate ul with data
$("#datalist").empty();
var strings = result.d;
for (var i = 0; i < strings.length; i++)
$("#datalist").append("<li>" + strings[i] + "</li>");
// move offset
offset += howMany;
}
function onError(result) {
// ajax call failed
alert(result.status + ': ' + result.statusText);
}
</script>
应该打开下拉列表的 HTML 代码:
<form id="form1" runat="server">
<div>
<ul id="datalist"></ul>
<br />
<input type="button" id="btnMore" value="more" />
</div>
</form>
我在 Chrome 或 Firefox 中的下拉列表中没有任何内容,但是当我在浏览器中打开 http://localhost:8080/rest/abcResource/showAll 时,我看到服务返回了一个字符串。
我不确定我在做什么错。你能从上面的代码中弄清楚吗?
【问题讨论】:
-
您是否在浏览器中使用 AJAX 控制台? Chrome 和 Safari 内置,Firefox 使用 Firebug。检查这将显示来自 Web 服务的响应是否损坏。鉴于错误消息,当然,我会专注于 Java 方面。
标签: jquery web-services rest jersey