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生成的測試儀界面中進行測試時也會發生這種情況。
你正在比較字符串與'==' –
糟糕是的。我在Web服務中尋找錯誤,因爲它運行在普通的Java應用程序中。謝謝^ _ ^。 –
問題在標題中。你應該永遠不要使用浮點錢。使用小數基數。 – EJP