我有兴趣在Tomcat环境中使用Apache的JAX-RS实现(CXF).关于使用JAX-RS/CXF开发RESTful服务的文档非常明确和直接.但是,我不确定如何在Tomcat环境的上下文中开发JAX-RS服务.
有谁知道为Tomcat开发JAX-RS/CXF服务的好教程?
我是比较新的JAX-RS,JPA,GlassFish的,Java DB的,和NetBeans,我想编写单元测试我的代码.[版本号在底部.]但是,我坚持从哪里开始.我已经做了很多搜索,但我还没有清楚地了解如何设置我的代码的嵌入式测试.我正在使用NetBeans,但我的问题很笼统.我希望我能更清楚地形成我的问题,但这是我能做的最好的事情.到目前为止,我已经找到了以下可能的部分(更像是此时的提示).
o我想在没有Maven的情况下进行设置,但这意味着我必须手动安装嵌入式jar.问:我在哪里可以找到它们?
o创建指定GlassFish和Java DB嵌入版本的config xml文件版本(glassfish-resources.xml和persistence.xml).问:但是,您如何告诉NetBeans使用它们进行测试而不是依赖于已安装版本的生产?
我认为persistence.xml看起来像这样(从使用嵌入式德比的hibernate):
<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:derby:test"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="root"/>
Run Code Online (Sandbox Code Playgroud)
o创建自定义Glassfish域配置文件(Embedded GlassFish忽略Maven测试资源).问:这应该是什么样的?我从使用NetBeans安装创建的默认domain1中获取了domain.xml,但它有很多内容.
o一旦我的项目可以访问嵌入的文件,并且它被配置为使用它们,我的JUnit线束应该是什么样的?http://jersey.java.net/nonav/documentation/latest/client-api.html#d4e759说:
protected void setUp() throws Exception {
...
glassfish = new GlassFish(BASE_URI.getPort());
ScatteredWar war = new ScatteredWar(...);
glassfish.deploy(war);
...
Run Code Online (Sandbox Code Playgroud)
但是,我也看到提到的EJBContainer,例如,(从http://docs.oracle.com/javaee/6/tutorial/doc/gkcqz.html):
@BeforeClass
public static void initContainer() throws Exception {
ec = EJBContainer.createEJBContainer(); ctx = ec.getContext();
}
Run Code Online (Sandbox Code Playgroud)
o我正在使用JPA,所以我需要访问PersistenceContext/EntityManager.目前我通过以下方式查询:
new InitialContext().lookup("java:module/<jax-rs resource name>");
Run Code Online (Sandbox Code Playgroud)
但我也看到了:
emf = Persistence.createEntityManagerFactory("chapter02PU");
Run Code Online (Sandbox Code Playgroud)
问:什么是正确的方法来掌握这个?
我将衷心感谢您的帮助.
我是java XML绑定的新手.
这是我的班级
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
/**
* @author Martin Burchard
*
*/
@XmlRootElement(name = "user")
public class User {
private String id;
private String nickname;
private String email;
private String password;
@XmlElement(name = "id")
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@XmlElement(name = "nickname")
public String getNickName() {
return nickname;
}
public void setNickName(String nickname) {
this.nickname = nickname;
}
@XmlElement(name = "email")
public String getEMail() {
return email; …Run Code Online (Sandbox Code Playgroud) 如果字符串看起来像数字,例如.111 CXF不会将其作为字符串返回,而是作为数字返回.
<bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.json.JSONProvider">
<property name="serializeAsArray" value="true" />
<property name="arrayKeys" ref="jsonKeys" />
</bean>
Run Code Online (Sandbox Code Playgroud)
可以看出,我使用的是JSON提供程序.如何强制它,提供正确的JSON字符串?
{object:{"name":"111"}} instead of {object:{"name":111}}
Run Code Online (Sandbox Code Playgroud)
提前致谢...
我试图在JBoss 7.2 Rest Easy中找出JAX-RS的样本.我收到如下错误信息.
SEVERE [org.jboss.resteasy.core.SynchronousDispatcher](http-/0.0.0.0:80-2)执行GET/test/resources/1失败:org.jboss.resteasy.core.NoMessageBodyWriterFoundFailure:无法找到MessageBodyWriter用于响应类型的对象:vsample.Image of media type:image/jpeg at org.jboss.resteasy.core.ServerResponse.writeTo(ServerResponse.java:216)[resteasy-jaxrs-2.3.5.Final.jar:] at org. jboss.resteasy.core.SynchronousDispatcher.writeJaxrsResponse(SynchronousDispatcher.java:602)[resteasy-jaxrs-2.3.5.Final.jar:] at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:528)[ resteasy-jaxrs-2.3.5.Final.jar:] org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:126)[resteasy-jaxrs-2.3.5.Final.jar:] at org.jboss .resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208)[resteasy-jaxrs-2.3.5.Final.jar:] org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55)[resteasy- jaxrs-2.3.5.Final.jar:] org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50)[resteasy-jaxrs-2.3.5.Final.jar:]在javax .servlet.http.HttpServlet.service(HttpServlet.java:847)[jboss-servlet-api_3.0_spec-1.0.2.Final.jar:1.0.2.Final] org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:295)[jbossweb-7.2.0.Final.jar:7.2.0.Final] org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)[jbossweb-7.2.0.在org.apache.catalina.core上的Final.jar:7.2.0.Final].StandardWrapperValve.invoke(StandardWrapperValve.java:230)[jbossweb-7.2.0.Final.jar:7.2.0.Final] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149)[jbossweb-7.2 .0.Final.jar:7.2.0.Final] at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169)[jboss-as-web-7.2.0.Final.jar:7.2 .O.Final] org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:145)[jbossweb-7.2.0.Final.jar:7.2.0.Final] org.apache.catalina.valves. ErrorReportValve.invoke(ErrorReportValve.java:97)[jbossweb-7.2.0.Final.jar:7.2.0.Final] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102)[jbossweb-7.2 .O.Final.jar:7.2.0.Final]在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:336)[jbossweb-7.2.0.Final.jar:7.2.0.Final] at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)[jbossweb-7.2.0.Final.jar:7.2 .or.Final] org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:653)[jbossweb-7.2.0.Final.jar:7.2.0.Final] at org.apache.tomcat. util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:920)[jbossweb-7.2.0.Final.jar:7.2.0.Final] at java.lang.Thread.run(Thread.java:722)[rt的.jar:1.7.0_17]JIoEndpoint $ Worker.run(JIoEndpoint.java:920)[jbossweb-7.2.0.Final.jar:7.2.0.Final] at java.lang.Thread.run(Thread.java:722)[rt.jar:1.7 .0_17]JIoEndpoint $ Worker.run(JIoEndpoint.java:920)[jbossweb-7.2.0.Final.jar:7.2.0.Final] at java.lang.Thread.run(Thread.java:722)[rt.jar:1.7 .0_17]
我的代码是,
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Application;
@ApplicationPath("/rest")
public class Etag extends Application {
}
Run Code Online (Sandbox Code Playgroud)
和,
import …Run Code Online (Sandbox Code Playgroud) 我在eclipse中使用JAX-RS编写REST Web服务,并将tomcat作为服务器.我指的是以下教程来编写Web服务:http: //www.vogella.com/tutorials/REST/article.html
当我运行该项目时,我收到以下错误:
Apr 7, 2014 12:01:53 AM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jre6\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;c:\Maven\bin;C:\Program Files\Java\jdk1.6.0_41\bin;E:\android\adt-bundle-windows-x86_64-20130219\sdk\tools;E:\android\adt-bundle-windows-x86_64-20130219\sdk\platform-tools;C:\strawberry\c\bin;C:\strawberry\perl\site\bin;C:\strawberry\perl\bin;C:\Program Files (x86)\Git\cmd;C:\Python27;C:\MinGW\bin;C:\Python27\Scripts;C:\Program Files\PostgreSQL\9.3\bin;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files (x86)\Microsoft SQL …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Jersey 2.13作为服务器进行小型REST服务,将Vaadin 7.3.3作为"客户端",但想法是请求可以来自任何地方(不仅仅是Vaadin,这就是为什么我不使用在请求时间的bean).假设用户已经注册,请求只检查他是否存在,并返回令牌.我有一个POST URL,https://localhost:8443/logins收到
{
"login-request":
{
"username":<insert username>,
"password":<insert password>
}
}
Run Code Online (Sandbox Code Playgroud)
并返回:
{
"login-token":
{
"token":<insert token>
}
}
Run Code Online (Sandbox Code Playgroud)
我的客户请求代码是:
Client client = ClientBuilder.newClient();
WebTarget target = client.target("https://127.0.0.1:8443/").path(appName + "/logins");
//build JSON Object
HashMap<String, String> userMap = new HashMap<>();
userMap.put("username", user.getUsername());
userMap.put("password", user.getPassword());
//JSON logins request!
JSONObject jsonLoginRequest = new JSONObject();
try {
jsonLoginRequest.put("login-request", userMap);
} catch (JSONException e) {
e.printStackTrace();
}
return target.request(MediaType.APPLICATION_JSON_TYPE).post(Entity.json(jsonLoginRequest.toString()));
Run Code Online (Sandbox Code Playgroud)
服务器处理代码是:
@POST
@Path("logins")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response generateToken(@Context HttpServletRequest request) {
if …Run Code Online (Sandbox Code Playgroud) 我已经阅读了很多关于stackoverflow的问题,但我没有解决我的问题.
这是我的Restful服务:
@GET
@Path("/GetAllProducts")
@Produces(MediaType.APPLICATION_JSON)
public String getAllProducts() {
return "{\"name\":\"MAC\", \"quantity\":\"10\"}";
}
Run Code Online (Sandbox Code Playgroud)
它在浏览器上工作正常但是当我使用AJAX时,它没有显示错误但显示了一个弹出窗口:失败的对象[对象]
我的AJAX代码:
$.ajax({
url: "http://localhost:8080/Restful/REST/WebService/GetAllProducts",
type: 'GET',
contentType: "application/json; charset=utf-8",
dataType: "jsonp",
success: function() {
alert("Success");
},
error: function(e) {
alert('Failed! ' + e);
}
});
Run Code Online (Sandbox Code Playgroud)
我试图添加:"crossDomain:true"但它没有用.
请帮我!谢谢!
任何人都可以帮我这个.
我使用带有wildfly 8.1.0的resteasy创建了一个Web服务,但@FormParam总是返回null.
UserService.java
Path("/user")
@Produces(MediaType.APPLICATION_JSON)
public class UserService {
@POST
@Produces(MediaType.APPLICATION_JSON)
@Path("/create")
public String create(@FormParam("first_name") String firstName, @FormParam("last_name") String lastName,
@FormParam("email") String email, @FormParam("username") String username,
@FormParam("password") String password, @FormParam("address") String address,
@FormParam("country") String country, @FormParam("zip") String zip, @FormParam("ssnlast4") String ssnlast4,
@FormParam("mobile") String mobile, @FormParam("dob_month") String dobMonth,
@FormParam("dob_year") String dobYear, @FormParam("reg_type") String regType,
@FormParam("avatar") String avatar) {
String str = firstName + ":" + lastName + ":" + email + ":" + username + ":" + password + ":" …Run Code Online (Sandbox Code Playgroud) 我有一个原始的inputStream,HttpServletRequest我需要使用JAX-RS客户端将收到的整个inputStream以及头文件发送到另一个servlet(实际上).
Client client = ClientBuilder.newClient();
WebTarget reTarget = client.target("http://localhost:8100/Server");
Invocation retargetInvocation = reTarget.request().??
Response.Response response = retargetInvocation.invoke();
Run Code Online (Sandbox Code Playgroud)
我应该如何为post请求进行调用Invocation retargetInvocation = reTarget.request().post(Entity<T>).inputStream可以包含任何Raw数据