2016-05-26 82 views
0

我有一個maven項目,在我的系統上運行成功。這個maven項目將任何網址作爲輸入。現在我想在點擊我的Chrome擴展時調用這個Maven項目。我的Chrome擴展能夠獲取網站的URL。混淆調用maven項目

所以,我怎麼能做到這一點?在搜索谷歌和許多其他資源時,我開始知道我必須製作一個可以傾聽客戶端行爲的寧靜的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 
+0

你想使用郵遞員來測試REST端點或Chrome中的一些其他工具? –

+0

@BilboBaggins:我對REST端點一無所知,這只是我收集的信息。 – Guru

+0

我認爲動機很明確,你能指導我如何完成 – Guru

回答

1

如果您有一個REST控制器寫入,它應該啓動並偵聽傳入的請求。您需要提供這些端點作爲請求url並獲取您的擴展中的信息。您可以直接使用瀏覽器或使用POSTMAN等擴展來檢查和測試您的REST端點。您可以將Chrome擴展中的XMLHttpRequest創建到您的REST端點。

例JS來調用您的REST API端點:

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); 
+0

非常感謝,但對於編寫REST控制器,我試過這個http://ideone.com/gC5Exg,服務器端口上運行,但給出錯誤「HTTP錯誤:500 問題訪問/你好。原因: 服務器錯誤「 – Guru

+0

這是使用jetty服務器編寫REST控制器的正確方法嗎? – Guru

+0

不可以。您應該清楚瞭解REST以及它的工作原理。每個端點都用您在註釋中鏈接的教程中的「@ Path」定義。首先,您需要經歷一下,或者如果您使用的是Spring,請閱讀本文[構建RESTful Web服務](https://spring.io/guides/gs/rest-service/)並測試API,然後再實施您的任何代碼擴展名爲。這裏有一個例子,如果你想嘗試[球衣](http://crunchify.com/how-to-build-restful-service-with-java-using-jax-rs-and-jersey/) – Lucky

1

開始https://jersey.java.net/ 新澤西REST Web服務框架是開源的。 你會從那裏得到一個簡要的想法。

而且你可以得到基本的球衣Web應用程序在這裏 https://github.com/Vijendra07Kulhade/jersey-quickstart

簡單地複製它和運行Maven安裝。

對於運行你的Maven項目中添加以下插件在你的pom.xml

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

您可以從上面的github回購採取參考。

運行命令mvn tomcat7:run 它將運行在tomcat的項目。它還會告訴它部署的環境。像下面的東西。你可以從郵遞員那裏得到這個。

localhost:8080/someContext/ 
+0

你的意思是提供的github回購將能夠把URL作爲輸入,每當我點擊Chrome擴展? – Guru

+0

不,對不起,我錯了你的問題。我正在給輸入來創建一個寧靜的Web應用程序。看起來你已經擁有了它。我不確定你是否在尋找這個。但是,你需要運行應用程序到一些服務器和它的終點URL,你可以從鉻擴展郵遞員。 –

+0

是的,你能告訴我如何運行我的maven項目到一些服務器,以及如何擊中鉻擴展郵遞員端點URL – Guru