2016-05-17 67 views
0

我正在用java实现一个简单的SOAP服务。我有一个简单的业务层类,它有两个功能:获取所有产品名称,另一个获取产品价格。如何在java中返回SOAP服务中的double值?

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

如果我将这些类作为普通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; 
    } 

} 

Client类:

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生成的测试仪界面中进行测试时也会发生这种情况。

+0

你正在比较字符串与'==' –

+0

糟糕是的。我在Web服务中寻找错误,因为它运行在普通的Java应用程序中。谢谢^ _ ^。 –

+0

问题在标题中。你应该永远不要使用浮点钱。使用小数基数。 – EJP

回答

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; 
    } 

}