Итак, у меня есть довольно простой веб-сервис RESTful jersey, и я хочу вызвать его из своего кода javascript. У меня нет проблем с выполнением запроса GET, но по какой-то причине, когда я выполняю PUT, я получаю ошибку «415 Unsupported Media Type». Есть идеи, что я делаю не так?
Вот мой веб-сервис:
package servlet;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.xml.bind.JAXBElement;
import com.mycompany.www.hudsonsemaphore.HudsonResult;
import com.mycompany.www.hudsonsemaphore.SemaphoreConstants;
@Path("/HudsonSemaphore")
public class HudsonSemaphore {
static private HudsonResult lastResult;
static private Object RESULT_LOCK = new Object();
@PUT
@Consumes({MediaType.APPLICATION_JSON})
static public void setResult(JAXBElement<HudsonResult> result) {
synchronized(RESULT_LOCK) {
lastResult=result.getValue();
}
}
@GET
@Produces({MediaType.APPLICATION_JSON})
public HudsonResult getLastResult() {
HudsonResult toReturn;
if(lastResult!=null) {
synchronized(RESULT_LOCK) {
toReturn = lastResult;
lastResult=null;
}
}
else {
toReturn = SemaphoreConstants.NULL_HUDSON_RESULT;
}
return toReturn;
}
}
Вот мой аннотированный элемент JAXB:
package com.mycompany.www.hudsonsemaphore;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlRootElement(name="hudsonResult")
@XmlType(propOrder = {
"message", "success"
})
public class HudsonResult {
private boolean success;
private String message;
public HudsonResult() {
success=false;
message=null;
}
public HudsonResult(String message, boolean success) {
this.success = success;
this.message = message;
}
@XmlElement
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message=message;
}
public void setSuccess(boolean success) {
this.success=success;
}
@XmlElement
public boolean isSuccess() {
return success;
}
public boolean equals(HudsonResult result) {
return(result.success == success && result.message.equals(message));
}
public String toString() {
return "Success : [" + String.valueOf(success) + "] Message : [" + message + "]";
}
}
И, наконец, вот мой код JavaScript:
<script type="text/javascript" src="/system/workplace/resources/ext/ext-base.js"></script>
<script type="text/javascript" src="/system/workplace/resources/ext/ext-all.js"></script>
<script type="text/javascript">
function pollSemaphore() {
Ext.Ajax.request({
url : 'http://localhost:8081/leadcapture/rest/HudsonSemaphore',
method: 'GET',
success:
function(result, request) {
var jsonData = Ext.util.JSON.decode(result.responseText);
if(jsonData.success=='true') {
alert('SUCCESS : ' + jsonData.message);
}
else {
alert('NOT SUCCESS : ' + result.responseText);
}
},
failure:
function(result, request) {
alert('Teh fail : ' + result.responseText);
}
});
}
function pushSemaphore() {
Ext.Ajax.request({
url : 'http://localhost:8081/leadcapture/rest/HudsonSemaphore',
method: 'PUT',
params: {message : 'Brand new car!', success : 'true'},
success:
function(result, request) {
alert('YOU RULE!');
},
failure:
function(result, request) {
alert('Teh fail : ' + result.responseText);
}
});
}
</script>
<input type="button" onclick="pushSemaphore()" value="Push"/> <br/>
<input type="button" onclick="pollSemaphore()" value="Poll"/> <br/>
Спасибо, что заглянули!