如何使用java语言将SOAP转换为REST?
package net.weather;
import java.sql.*;
import javax.jws.WebService;
@WebService
public class ProjectFinalWS{
Connection con;
Statement st;
ResultSet rs;
String res;
public void connectDB()
{
String url ="jdbc:mysql://localhost:3306/";
String dbName ="project";
String driver = "com.mysql.jdbc.Driver";
String userName = "root";
String password = "root";
try
{
Class.forName(driver).newInstance();
con = DriverManager.getConnection(url+dbName,userName,password);
}catch(Exception e){}
}
public float getMaxTemp(String city)
{ float mxtemp=0;
connectDB();
try{
st=con.createStatement();
rs=st.executeQuery("select maxtemp from weather where city='"+city+"'");
rs.next();
mxtemp=rs.getFloat(1);
st.close();
con.close();
}
catch(Exception e){}
return mxtemp;
}
public float getMinTemp(String city)
{ float mntemp=0;
connectDB();
try{
st=con.createStatement();
rs=st.executeQuery("select mintemp from weather where city='"+city+"'");
rs.next();
mntemp=rs.getFloat(1);
st.close();
con.close();
}
catch(Exception e){}
return mntemp;
}
public float getHumidity(String city)
{ float humidity=0;
connectDB();
try{
st=con.createStatement();
rs=st.executeQuery("select humidity from weather where
city='"+city+"'");
rs.next();
humidity=rs.getFloat(1);
st.close();
con.close();
}
catch(Exception e){}
return humidity;
}
}
答案 0 :(得分:4)
REST是一种将Web服务视为SOAP的完全不同的方式。特别是,它在资源,它们的表示和它们之间的链接方面运行。 (你也有关于HTTP的动词,但对于像这样的简单查询服务,你可能只会使用GET。)
该界面的RESTful版本有点像这样:
现在,我们需要将这些内容映射到网址:
/search?place=somename
(很容易在地名后面挂钩),其中包含指向...的链接。/place/{id}
(其中{id}
是一些通用ID,可能是您的数据库的主键;我们不想在此使用此名称,因为名称有重复问题),其中包含链接为... /place/{id}/maxTemp
,/place/{id}/minTemp
,/place/{id}/humidity
。我们还需要有一些方法来创建文档。 JAXB 推荐。链接应该使用名为xlink:href
的属性在XML中完成;使用(通过引用)XLink规范就像确切地说明属性的内容是一个链接(由于其一般性质,其中的明确声明在XML中是一个真正的问题)。
最后,您可能希望使用JAX-RS将Java代码绑定到服务。这比自己写的更容易。这让你可以开始做这样的事情(为了简洁而省略了数据绑定类):
public class MyRestWeatherService {
@GET
@Path("/search")
@Produces("application/xml")
public SearchResults search(@QueryParam("place") String placeName) {
// ...
}
@GET
@Path("/place/{id}")
@Produces("application/xml")
public PlaceDescription place(@PathParam("id") String placeId) {
// ...
}
@GET
@Path("/place/{id}/maxTemp")
@Produces("text/plain")
public String getMaxTemperature(@PathParam("id") String placeId) {
// ...
}
// etc.
}
正如你所看到的,它可以继续下去,但只要你从一个好的计划开始,一切都意味着它就不难做到......
答案 1 :(得分:3)
谢天谢地,Donal Fellows指出了@WebService注释。在他做之前我没有意识到这是一个Web服务。
使用此实现时,您将遇到更多API选择问题。如果您在Java EE应用服务器上进行部署,我建议使用JNDI数据源和连接池而不是硬连线数据库参数,并为每个请求进行连接。
最好关闭finally块中的资源,包含在各个try / catch块中。
那些空的挡块会让你发疯。糟糕的事情会发生,但你永远不会知道。
SOAP客户端通过HTTP将XML请求发送到解析它的服务,将值绑定到输入,使用它们来完成用例,并将响应编组为XML以便发回。
REST要求客户端执行所有相同的操作,除了将请求参数打包到通过HTTP发送的XML请求中。 API是HTTP GET,POST,DELETE。您将方法调用表示为URI。
因此,您需要熟悉您的SOAP API以及您的一些大脑。我不知道为你做任何工具。