使用Activiti Rest Web服务的问题
编辑:为了简化我的问题,有没有人设法与 Activiti 使用休息?如果是的话,请您发布您的代码。 谢谢。
我一直在努力使用 Rest 登录 Activiti。我遵循 api 指南并实现了以下
代码:
package demo;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.UniformInterfaceException;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.sun.jersey.core.util.MultivaluedMapImpl;
import com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider;
public class Aloha {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Client client = Client.create();
WebResource webResource = client
.resource("http://localhost:8080/activiti-rest/service/login");
MultivaluedMap<String, String> formData = new MultivaluedMapImpl();
formData.add("userId", "kermit");
formData.add("password", "kermit");
ClientResponse response;
try {
response = webResource.type("application/x-www-form-urlencoded")
.post(ClientResponse.class, formData); // webResource.accept(MediaType.TEXT_PLAIN_TYPE).post(ClientResponse.class,
// formData);
System.out.print(response.toString());
} catch (UniformInterfaceException ue) {
System.out.print(ue.getMessage());
}
}
}
如您所见,我正在使用 Jersey 来使用 Web 服务,这是我一直得到的响应:
Quote:
POST http://localhost:8080/activiti-rest/service/login returned a response status of 415 Unsupported Media Type
请您指出我在这里做错了什么?
请注意,当我用“application/json”替换类型时,我收到以下错误:
代码:
Exception in thread "main" com.sun.jersey.api.client.ClientHandlerException: com.sun.jersey.api.client.ClientHandlerException: A message body writer for Java type, class com.sun.jersey.core.util.MultivaluedMapImpl, and MIME media type, application/json, was not found
at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:149)
at com.sun.jersey.api.client.Client.handle(Client.java:648)
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:670)
at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:563)
at demo.Aloha.main(Aloha.java:32)
Caused by: com.sun.jersey.api.client.ClientHandlerException: A message body writer for Java type, class com.sun.jersey.core.util.MultivaluedMapImpl, and MIME media type, application/json, was not found
at com.sun.jersey.api.client.RequestWriter.writeRequestEntity(RequestWriter.java:288)
at com.sun.jersey.client.urlconnection.URLConnectionClientHandler._invoke(URLConnectionClientHandler.java:204)
at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:147)
... 5 more
非常感谢,
Edit: to simplify my question, has anyone managed to communicate with
Activiti using rest?, and if so could you be kind to post your code.
thanks.
I've been struggeling for a while to login to Activiti using Rest. I followed the api guides and implemented the following
Code:
package demo;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.UniformInterfaceException;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.sun.jersey.core.util.MultivaluedMapImpl;
import com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider;
public class Aloha {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Client client = Client.create();
WebResource webResource = client
.resource("http://localhost:8080/activiti-rest/service/login");
MultivaluedMap<String, String> formData = new MultivaluedMapImpl();
formData.add("userId", "kermit");
formData.add("password", "kermit");
ClientResponse response;
try {
response = webResource.type("application/x-www-form-urlencoded")
.post(ClientResponse.class, formData); // webResource.accept(MediaType.TEXT_PLAIN_TYPE).post(ClientResponse.class,
// formData);
System.out.print(response.toString());
} catch (UniformInterfaceException ue) {
System.out.print(ue.getMessage());
}
}
}
As you can see I am using Jersey to consume the webservice, and here is the response I am getting all time:
Quote:
POST http://localhost:8080/activiti-rest/service/login returned a response status of 415 Unsupported Media Type
Please could you point out what I am doing wrong here?
Please note that when I replace the type with "application/json" i get the follow error:
Code:
Exception in thread "main" com.sun.jersey.api.client.ClientHandlerException: com.sun.jersey.api.client.ClientHandlerException: A message body writer for Java type, class com.sun.jersey.core.util.MultivaluedMapImpl, and MIME media type, application/json, was not found
at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:149)
at com.sun.jersey.api.client.Client.handle(Client.java:648)
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:670)
at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:563)
at demo.Aloha.main(Aloha.java:32)
Caused by: com.sun.jersey.api.client.ClientHandlerException: A message body writer for Java type, class com.sun.jersey.core.util.MultivaluedMapImpl, and MIME media type, application/json, was not found
at com.sun.jersey.api.client.RequestWriter.writeRequestEntity(RequestWriter.java:288)
at com.sun.jersey.client.urlconnection.URLConnectionClientHandler._invoke(URLConnectionClientHandler.java:204)
at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:147)
... 5 more
Many Thanks,
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
尝试以下操作:
这是 LoginInfo 类的代码:
这是 main() 方法的代码:
注意: 我还没有尝试过这个,也许有一些拼写错误等等。另外,LoginInfo 可以变成一个带有 setter/getter 之类的真正的 bean,只是想保持简单。看看是否有效...
Try the following:
Here is the code for the LoginInfo class:
Here is the code for the main() method:
Note: I haven't tried this, maybe there are some typos or so. Also the LoginInfo can be turned into a real bean with setters/getters and stuff, just wanted to keep it simple. See if it works...
作为 jersey 的替代方案,此代码使用 Restlet 使用 Rest 与 Activiti 进行交互。
此代码来自 Activiti 的实际应用 - 第 8 章。所有功劳都应归功于 Tijs Rademakers。
As an alternative to jersey, This code uses Restlet to interact with Activiti using Rest.
This code are from Activiti in Action- Chapter 8. All credit should goes to Tijs Rademakers.
错误
还可以根深蒂固的依赖性。就我而言,我最终用一个
泽西 - 巴尼(Jersey-Bundle)
替换了所有单一的球衣工具,例如。
The error
can also have it roots in maven dependencies. In my case I ended up replacing all the single Jersey artifacts like
with one
jersey-bundle
.我遇到了同样的问题,这些问题通过消除了对泽西 - 米尔特帕特1.19.jar的依赖而解决的问题。当建立一个共同的依赖罐(包括泽西束和多部分罐子)时,我会得到上述例外。分开他们解决了问题。
I had the same issue which got solved by removing the dependency on jersey-multipart-1.19.jar. I was getting the above exception when a common dependency jar was built which included the jersey bundle and the multipart jar. Separating them solved the issue.
虽然这是一篇旧文章,但我认为我应该分享基于 HTTPClient 版本 4.1.3 的代码。我在使用 Activiti REST 获取身份验证机制时遇到了类似的问题。虽然这篇文章涵盖了基于 Jersey 和 Restlet 的解决方案,但我认为发布基于 HTTPClient 的解决方案会很有帮助。
创建 HTTPClient。请注意,它还创建 TargetHost(用于执行操作:
创建 HTTP 上下文:
添加方法来获取目标主机:
最后调用 REST:
我想变量名称是不言自明的。
谢谢
Though this is an old post but I thought I should share my code based on HTTPClient version 4.1.3. I had a similar problem getting authentication mechanism work with Activiti REST. Though this post covers solutions based on Jersey and Restlet, I thought it would be helpful to post a solution based on HTTPClient.
Create the HTTPClient. Please note that it also creates the TargetHost (which is used to execute an action:
Create HTTP Context:
Add a method to get the target host:
Finally invoke the REST:
I suppose the variable names would be self explanatory.
Thanks