如何在java中的SOAP服务中返回double值?

时间:2016-05-17 00:32:14

标签: java soap

我在java中实现了一个简单的SOAP服务。我有一个简单的业务层类,它有两个功能:获取所有产品名称,另一个获得产品价格。

我有一个Service层类,用于初始化产品数据并发送到业务层并调用业务层的方法。

如果我将这些类作为常规java应用程序进行测试,则所有函数都可以正常工作,getPrice将返回产品的价格(10.00,15.00或18.00)。但是,一旦我将其部署为Web服务并尝试通过SOAP客户端或Glassfish测试器GUI进行测试,get price的功能始终返回0.0(它不会返回产品的价格)。

这是BL代码:

package BLayer;
import java.util.*;

public class ProdBL{
   HashMap<String, Double> prods ;

   public ProdBL(HashMap<String, Double> prods ){
      this.prods = prods;
   }

   public String getNames(){
      String s ="";
      for(Map.Entry<String, Double> e: prods.entrySet() ){
         s+= e.getKey();
      }
      return s;
   }

   public double getPrice(String name){
      double s =0.0;
      for(Map.Entry<String, Double> e: prods.entrySet() ){
         if(e.getKey() == name) {
            s = e.getValue();
         }
      }
      return s;
   }


}

这是服务层代码:

package SLayer;
import java.util.*;
import BLayer.*;
import javax.jws.*;

@WebService(serviceName="MyProdService")
public class ProdService{
   HashMap<String, Double> prods ;
   ProdBL bl;

   @WebMethod(operationName="intiliazeProducts")
   public String init(){
   this.prods = new HashMap<String, Double>();
     this.prods.put("A",10.00);
     this.prods.put("V",15.00);
      this.prods.put("D",18.00);
      this.bl = new ProdBL(prods);
      return "Products Initilzed";
   }
    @WebMethod(operationName="getProdNames")
   public String getNames(){
      String s ="";
      s = bl.getNames();
      return s;
   }
   @WebMethod(operationName="getProdPrice")
   public double getProdPrice(String name){
      double price =0.0;
//       ProdBL blp = new ProdBL(prods);
      price= bl.getPrice(name);
      return price;
   }

}

客户端类:

import proxies.*;

public class Client{

   public static void main(String[] args){

      MyProdService s = new MyProdService();
      ProdService port = s.getProdServicePort();
      try{
         port.intiliazeProducts();
         System.out.println(port.getProdNames());
         port.intiliazeProducts();
       System.out.println(port.getProdPrice("A"));


      }catch(Exception e){

         e.getMessage();
      }
   }
}

为什么getProdPrice总是返回0.0,而getNames()工作正常?即使我在SOAP UI或Glassfish生成的测试器界面中测试它,也会发生这种情况。

1 个答案:

答案 0 :(得分:0)

Try to rewrite your code like this:


package SLayer;
import java.util.*;
import BLayer.*;
import javax.jws.*;

@WebService(serviceName="MyProdService")
public class ProdService{
   private static HashMap<String, Double> prods ;
   private static ProdBL bl;

   static {
       prods = new HashMap<String, Double>();
       prods.put("A",10.00);
       prods.put("V",15.00);
       prods.put("D",18.00);
       bl = new ProdBL(prods);
   }

    @WebMethod(operationName="getProdNames")
   public String getNames(){
      String s ="";
      s = bl.getNames();
      return s;
   }
   @WebMethod(operationName="getProdPrice")
   public double getProdPrice(String name){
      double price =0.0;
      price= bl.getPrice(name);
      return price;
   }

}