将 SOAP 转换为 REST

use*_*702 3 rest soap web-services middleware

如何使用 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;
  }
 }
Run Code Online (Sandbox Code Playgroud)

Don*_*ows 5

REST 是一种完全不同的方式来看待 SOAP 的 Web 服务。特别是,它在资源、它们的表示以及它们之间的链接方面运作。(您也有 HTTP 动词,但对于像这样的简单查询服务,您可能只会使用 GET。)

该接口的 RESTful 版本的工作方式有点像这样:

  1. 客户会决定他们想要了解有关特定地点的一些信息,因此他们会要求服务搜索该地点并告诉他们指向该地点的链接,或者至少是与搜索条件匹配的地点;因为这可能是几个不同的地方(想想“伦敦,英国”与“伦敦,安大略省”以响应搜索“伦敦”)结果将是一个页面,链接到每个地方的特征。它还可能会说明每个链接的含义,但这不是必需的。(结果的格式可以是 HTML、XML、JSON 或多种不同格式中的任何一种;HTTP 内容协商是在它们之间进行选择的好方法。)
  2. 一旦用户从列表中决定了他们真正想要信息的地点,他们就会点击链接并获得关于该地点的哪些信息可用的描述。该文档提供指向提供最高温度的页面、提供最低温度的另一个页面和提供湿度的第三个页面的链接。
  3. 要获取实际数据,请遵循另一个链接并提供该数据。由于数据是一个简单的浮点数,将其作为纯文本返回是非常合理的。

现在,我们需要将这些东西映射到 URL:

  1. 搜索:(/search?place=somename很容易挂在地名后面),其中包含指向……的链接。
  2. 地点:(一些通用 ID/place/{id}在哪里{id},它可能是您的数据库的主键;由于重复名称问题,我们不想在此处使用该名称),其中包含指向……的链接。
  3. 数据:/place/{id}/maxTemp/place/{id}/minTemp/place/{id}/humidity

我们还需要有一些方法来创建文档。推荐使用JAXB 。链接可能应该在 XML 中完成,属性称为xlink:href; 使用(通过引用)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.
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它可以继续进行一点,但只要您从一个关于一切含义的良好计划开始,就可以做到这一点并不难……