我最近加入了一个项目,我应该将Web服务从Axis1.2更改为REST。该项目已经开发了10年,很多人都在研究它,所以不幸的是我不知道为什么会这样做,只是它完成了。
我正在使用Jersey,虽然我已经完成了很多教程,但它仍然不起作用。
这是我的服务器代码:
@Path("/positionfacade")
@Consumes(MediaType.APPLICATION_XML)
public class PositionFacadeRest implements PositionFacadeInterface {
@POST
@Path("/{sessionId}/{type}/{mapIdentifier}/{positionX}/{positionY}/{positionZ}/{character}/{identifier}/{displayName}/{fixed}/{attributes}/{lastObservedTime}/{sensorData}/{coordinates}")
@Consumes(MediaType.APPLICATION_XML)
public void createOrUpdatePositionRest(
@PathParam("sessionId") long sessionId,
@PathParam("type") String type,
@PathParam("mapIdentifier") String mapIdentifier,
@PathParam("positionX") Integer positionX,
@PathParam("positionY") Integer positionY,
@PathParam("positionZ") Integer positionZ,
@PathParam("character") SignalCharacterDTO character,
@PathParam("identifier") String identifier,
@PathParam("displayName") String displayName,
@PathParam("fixed") Boolean fixed,
@PathParam("attributes") AttributesDTO attributes,
@PathParam("lastObservedTime") long lastObservedTime,
@PathParam("sensorData") SensorDTO[] sensorData,
@PathParam("coordinates") CoordinateDTO[] coordinates)
throws SessionException, MapException {
...
}
}
我的客户代码:
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
...
Client restclient = Client.create();
WebResource resource = restclient.resource("http://"+sci.getHostName()+":"+new Integer(sci.getPort()).toString()+"/application/rest/positionfacade/"+
sessionIds.get(sci)+"/"+
node.getType()+"/"+
controller.getCurrentMap().getIdentifier()+"/"+
node.getX()+"/"+
node.getY()+"/"+
node.getZ()+"/"+
signalCharacter_+"/"+
node.getIdentifier()+"/"+
node.getDisplayName()+"/"+
null+"/"+
null+"/"+
lastObservedTime_+"/"+
null+"/"+
null
);
resource.post();
web.xml:
<servlet>
<servlet-name>rest</servlet-name>
<servlet-class>
com.sun.jersey.spi.container.servlet.ServletContainer
</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>net.sf.application.server.facade</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>rest</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
错误消息:
Exception in thread "Thread-64" com.sun.jersey.api.client.UniformInterfaceException: POST http://localhost:8080/application/rest/positionfacade/121/CLIENT/eca723a4-bd53-405e-893b-6ff8365d58b9/0/0/0/net.sf.application.server.dto.SignalCharacterDTO@229509bb/1/1/null/null/-1/null/null returned a response status of 404 Not Found
应用程序在Tomcat7上运行,位于webapps / application
中许多人非常感谢您的帮助。 : - )