2016-05-17 24 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; 
    } 

}