2016-05-17 5 views
0

私はJavaで単純なSOAPサービスを実装しています。私は、2つの機能を持つシンプルなビジネスレイヤークラスを持っています:すべての製品名を取得し、もう1つは製品価格を取得します。JavaのSOAPサービスでdouble値を返す方法は?

私は、製品データを初期化してビジネスレイヤに送信し、ビジネスレイヤのメソッドを呼び出すサービスレイヤクラスを持っています。

クラスを通常のJavaアプリケーションとしてテストすると、すべての関数が動作し、getPriceが製品の価格(10.00、15.00、または18.00)を返します。しかし、WebサービスとしてデプロイしてSOAPクライアントまたはGlassfishテスターのGUIでテストしようとすると、get priceの関数は常に0.0を返します(これは製品の価格を返しません)。ここで

は、BLコードです:

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クラス:

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


} 

は、サービス層のコードがあるのに対しによりgetNames()

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を返しませんうまくいく?これはSOAP UIやGlassfishでテストした場合でも発生します。

+0

文字列を '==' –

+0

と比較しています。私はそれが実行され、通常のJavaアプリケーションで動作するため、私はWebサービスの間違いを探していた。ありがとう^ _ ^。 –

+0

問題はタイトルにあります。 ***あなたはお金のために浮動小数点を使用しないでください***。 10進数を使用します。 – 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; 
    } 

} 
関連する問題