我在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生成的测试器界面中测试它,也会发生这种情况。
答案 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;
}
}