2016-11-08 82 views
1

我在爲Web服務生成消息和響應構件時遇到了一些問題。我在嘗試時遇到了cmd錯誤:生成WebService構件時遇到問題

C:\ Users \ KingMarkMcC \ workspace \ WebServiceJX> wsgen -cp -keep。 WebServiceImp選項 「-classpath」 需要一個參數

這裏是我的WebServiceInterface

package CacheServer; 

import javax.jws.WebMethod; 
import javax.jws.WebService; 
import javax.jws.soap.SOAPBinding; 
import javax.jws.soap.SOAPBinding.Style; 

@WebService 
@SOAPBinding(style= Style.DOCUMENT) 
public interface WebServiceInterface { 

    @WebMethod Object get(Object k); 
    @WebMethod void put(Object k, Object v); 
    @WebMethod void remove(Object k); 
    @WebMethod void flush(); 
    @WebMethod int size(); 
} 

而且我下面的實施WebService 包CacheServer的;

import java.util.LinkedHashMap; 
import java.util.Map; 

import javax.jws.WebService; 


@WebService(endpointInterface = "CacheServer.WebServiceInterface") 

public class WebServiceImp implements WebServiceInterface{ 

CacheDataStruct cache; 

WebServiceImp(int i){ 
    cache = new CacheDataStruct(i); 
} 

//Getting from Cache 
@Override 
public Object get(Object k){ 
    System.out.println("GET REQUESTED"); 
    return getter(k); 
} 
private Object getter(Object k){ 
    return cache.get(k); 
} 

//Putting into Cache 
@Override 
public void put(Object k, Object v){ 
    System.out.println("PUT REQUESTED"); 
    putter(k,v); 
} 
private void putter(Object k, Object v){ 
    cache.put(k, v); 
} 

//Removing from Cache 
@Override 
public void remove(Object k){ 
    System.out.println("REMOVE REQUESTED"); 
    remover(k); 
} 
private void remover(Object k){ 
    cache.remove(k); 
} 

//Getting size of Cache 
@Override 
public int size(){ 
    System.out.println("SIZE REQUESTED"); 
    return sizer(); 
} 
private int sizer(){ 
    return cache.size(); 
} 

//Flushing Cache 
@Override 
public void flush(){ 
    System.out.println("FLUSH REQUESTED"); 
    flusher(); 
} 
private void flusher(){ 
    cache.flush(); 
} 

class CacheDataStruct extends LinkedHashMap<Object,Object>{ 
    private static final long serialVersionUID = -8892618408950826874L; 
    public final int CACHESIZE; 
    private final static float loadFactor =0.75f; 

    protected boolean removeEldestEntry(Map.Entry<Object, Object> eldest) { 
     return size() > CACHESIZE; 
    } 

    public CacheDataStruct(int cacheSize){ 
     super(cacheSize,loadFactor,true); 
     this.CACHESIZE=cacheSize; 
    } 

    void flush(){ 
     clear(); 
     System.out.println("Cache has been cleared."); 
    } 
} 
} 

任何關於生成工件的幫助將非常感謝!

回答

0

經過我的分析,我選擇了第一個挑戰在於您的服務實現Bean(SIB)WebServiceImp。您的SIB正在使用無效的構造函數:包訪問構造函數,因此爲了公開您的服務,您需要添加一個公共無參數構造函數

由JSR 181定義,用javax.jws.WebService註釋的類 必須具有默認的公共構造函數。 SIB類必須是頂級 級別類或靜態內部類。 SIB構造的

例子:

public WebServiceImp() {} 
    public WebServiceImp(int i) { 
     cache = new CacheDataStruct(i); 
    } 

上述變化後,可能編譯(javac的CacheServer/* JAVA)後,你可以運行你的wsgen命令或只需運行下面的命令(而在src文件夾):

 wsgen -cp "." -wsdl CacheServer.WebServiceImp 

也覺得通過你的論點,而不是使用SIB構造的另一種方式,也許委託給另一個POJO需要參數構造一個對象的實例。