【问题标题】:Confusion in invoking maven project调用maven项目的困惑
【发布时间】:2016-09-24 01:19:16
【问题描述】:

我有一个在我的系统上成功运行的 maven 项目。这个 maven 项目将任何 Web URL 作为输入。现在我想在点击我的 chrome 扩展时调用这个 Maven 项目。我的 chrome 扩展程序能够获取网站的 URL。

那么我该怎么做呢?在搜索 google 和许多其他资源时,我开始知道我必须制作一个可以监听客户端行为的宁静 Web 服务。

但我仍然不清楚如何做到这一点?我连最初的步骤都不清楚?

任何想法都会对我有很大帮助!

我对 REST 端点/邮递员一无所知,这只是我收集的信息。

P.S如果我描述的场景不清楚,请评论,我会尝试添加更多细节。

编辑 1

这是我的 JS 源代码

document.addEventListener('DOMContentLoaded', function () {

      chrome.tabs.query({ currentWindow: true, active: true }, function (tabs) {
      alert(tabs[0].url)
      var req = new XMLHttpRequest();
      req.open("POST", "http://localhost:8080/SalesRESTservice/apicall/restcall2", true);
      req.onload = onResponseReceived;
      var par = 99.99;
      req.send(par);

        function onResponseReceived() {
            alert("It worked.");
        }
      // document.getElementById('Current_url').value = tabs[0].url;
      //console.log(tabs[0].url, tabs[0].title, tabs[0].incognito, tabs, this.bookmark_title);
    });
  });

这是我的 JAVA 端点代码

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
import org.json.JSONException;
import org.json.JSONObject;

@Path("/restcall2")
public class restcall2 {

      @POST
      @Produces("application/json")
      public Response convertFtoC(Double param) throws JSONException {

        JSONObject jsonObject = new JSONObject();
        Double fahrenheit = param;
        Double celsius;
        celsius = (fahrenheit - 32)*5/9; 
        jsonObject.put("F Value", fahrenheit); 
        jsonObject.put("C Value", celsius);

        String result = "@Produces(\"application/json\") Output: \n\nF to C Converter Output: \n\n" + jsonObject;
        return Response.status(200).entity(result).build();
      }

}

我尝试将华氏值发送到 java func.,但它给出了错误?

控制台错误

INFO: Server startup in 1052 ms
May 27, 2016 1:54:17 PM com.sun.jersey.spi.container.ContainerRequest getEntity
SEVERE: A message body reader for Java class java.lang.Double, and Java type class java.lang.Double, and MIME media type application/octet-stream was not found.
The registered message body readers compatible with the MIME media type are:
application/octet-stream ->
  com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
  com.sun.jersey.core.impl.provider.entity.FileProvider
  com.sun.jersey.core.impl.provider.entity.InputStreamProvider
  com.sun.jersey.core.impl.provider.entity.DataSourceProvider
  com.sun.jersey.core.impl.provider.entity.RenderedImageProvider
*/* ->
  com.sun.jersey.core.impl.provider.entity.FormProvider
  com.sun.jersey.core.impl.provider.entity.StringProvider
  com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
  com.sun.jersey.core.impl.provider.entity.FileProvider
  com.sun.jersey.core.impl.provider.entity.InputStreamProvider
  com.sun.jersey.core.impl.provider.entity.DataSourceProvider
  com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
  com.sun.jersey.core.impl.provider.entity.ReaderProvider
  com.sun.jersey.core.impl.provider.entity.DocumentProvider
  com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader
  com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader
  com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader
  com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$General
  com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
  com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
  com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General
  com.sun.jersey.core.impl.provider.entity.EntityHolderReader
  com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$General
  com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$General

May 27, 2016 1:54:19 PM com.sun.jersey.spi.container.ContainerRequest getEntity
SEVERE: A message body reader for Java class java.lang.Double, and Java type class java.lang.Double, and MIME media type application/octet-stream was not found.
The registered message body readers compatible with the MIME media type are:
application/octet-stream ->
  com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
  com.sun.jersey.core.impl.provider.entity.FileProvider
  com.sun.jersey.core.impl.provider.entity.InputStreamProvider
  com.sun.jersey.core.impl.provider.entity.DataSourceProvider
  com.sun.jersey.core.impl.provider.entity.RenderedImageProvider
*/* ->
  com.sun.jersey.core.impl.provider.entity.FormProvider
  com.sun.jersey.core.impl.provider.entity.StringProvider
  com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
  com.sun.jersey.core.impl.provider.entity.FileProvider
  com.sun.jersey.core.impl.provider.entity.InputStreamProvider
  com.sun.jersey.core.impl.provider.entity.DataSourceProvider
  com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
  com.sun.jersey.core.impl.provider.entity.ReaderProvider
  com.sun.jersey.core.impl.provider.entity.DocumentProvider
  com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader
  com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader
  com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader
  com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$General
  com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
  com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
  com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General
  com.sun.jersey.core.impl.provider.entity.EntityHolderReader
  com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$General
  com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$General

【问题讨论】:

  • 您是否尝试使用 postman 或 chrome 中的其他工具测试 REST 端点?
  • @BilboBaggins:我对 REST 端点一无所知,这只是我收集的信息。
  • 我认为动机很清楚,你能指导我如何完成那个
  • 对我来说,不清楚,希望你能从下面给出的答案中找到你的答案,如果你没有,那么你需要澄清你的动机;)

标签: java maven google-chrome


【解决方案1】:

如果您编写了一个 REST 控制器,它应该已启动并监听传入的请求。您需要提供这些端点作为请求 url 并在您的扩展中获取信息。您可以直接使用浏览器或使用 POSTMAN 等扩展程序来检查和测试您的 REST 端点。您还可以从 chrome 扩展创建一个 XMLHttpRequest 到您的 REST 端点。

用于调用 REST API 端点的示例 JS:

var req = new XMLHttpRequest();
req.open("GET", "http://api.myrestapi.com/services/rest/getEmployee", true);
req.onload = onResponseReceived;
req.send(null);

function onResponseReceived() {
    console.log("It worked.");
}

如果您需要使用 POST 方法发送参数,请尝试这样,

var http = new XMLHttpRequest();
var someValue = "99.99";
var url = "http://localhost:8080/SalesRESTservice/apicall/restcall2/"+param;
var params = JSON.stringify({ param: someValue });
http.open("POST", url, true);

http.setRequestHeader("Content-type", "application/json; charset=utf-8");
http.setRequestHeader("Content-length", params.length);
http.setRequestHeader("Connection", "close");

http.onreadystatechange = function() {
    if(http.readyState == 4 && http.status == 200) {
        alert(http.responseText);
        //or do some callback
    }
}
http.send(params);

【讨论】:

  • 非常感谢,但是对于编写 REST 控制器,我已经尝试过 ideone.com/gC5Exg,服务器正在端口上运行但给出错误“HTTP 错误:500 访问 /hello 时出现问题。原因:服务器错误”
  • 这是使用码头服务器编写 REST 控制器的正确方法吗?
  • 没有。您应该清楚地了解 REST 及其工作原理。在您在 cmets 中链接的教程中,每个端点都使用 @Path 定义。首先,您需要完成此操作,或者如果您使用的是 spring,请阅读此 Building a RESTful Webservice 并在您在 chrome 扩展中实现任何代码之前测试 API。如果您想尝试jersey,这是一个示例
  • 对于像我这样的新手来说似乎非常有用的链接。肯定会通过他们。谢谢
  • @Lucky:我按照教程成功制作了 REST 控制器,现在正如你所说,在用于调用 REST API 端点的示例 JS 中,我无法将参数发送到我的 JAVA REST 控制器
【解决方案2】:

https://jersey.java.net/开头 Jersey RESTful Web 服务框架是开源的。 您将从那里得到一个简短的想法。

您还可以在此处获取基本的球衣网络应用程序 https://github.com/Vijendra07Kulhade/jersey-quickstart

只需克隆它并运行 maven install。

为了运行你的 maven 项目,在你的 pom.xml 中添加下面的插件

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
  </plugin>

您可以从上面的 github repo 中获取参考。

运行命令mvn tomcat7:run 它将在 tomcat 中运行您的项目。它还将告诉它部署的上下文。如下所示。你可以从邮递员那里打这个。

localhost:8080/someContext/

【讨论】:

  • 你的意思是提供的 github repo 将能够将 URL 作为输入,我会点击 chrome 扩展?
  • 不,对不起,我把你的问题弄错了。我正在提供输入以创建一个安静的 Web 应用程序。看起来你已经拥有了。我不确定你是否正在寻找这个。但是您需要将应用程序运行到某个服务器及其端点 url,您可以从 chrome 扩展邮递员中找到它。
  • 是的,你能告诉我如何在某个服务器上运行我的 maven 项目,以及如何从 chrome 扩展邮递员访问端点 URL
  • 我一直在关注这个jlunaquiroga.blogspot.in/2014/01/…
  • 关于运行应用程序我可以看到这个类(不是客户端)MinimalServerRest中有一个main方法,你可以直接运行这个方法。
猜你喜欢
  • 1970-01-01
  • 2014-06-05
  • 2011-03-23
  • 1970-01-01
  • 2014-02-12
  • 2011-02-28
  • 2018-02-20
  • 1970-01-01
  • 2018-04-14
相关资源
最近更新 更多