2012-02-08 18 views
2

Web Sphere 7.0.0.19サーバーでホストされているJAX-WSサービスがあります。このサービスは@WebServiceアノテーションを使用して実装されています。 WSDLを尋ねるサービスを打つと、XMLが返されます。しかし、我々は、Webサービスメソッドを呼び出した場合、それは次のエラーを返します。Webサービス・エラー:クラスxxxもそのスーパー・クラスもこのコンテキストで認識されていません

javax.xml.ws.soap.SOAPFaultException: javax.xml.bind.MarshalException 
- with linked exception: 
[javax.xml.bind.JAXBException: class com.penske.newreuse.vo.ApplicationConfigVO nor any of its super class is known to this context.] 
    at  com.sun.xml.internal.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:171) 
    at  com.sun.xml.internal.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:94) 
    at  com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:240) 
    at  com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:210) 
    at  com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:103) 

たちのログを見ると、私たちのコードが正常に呼び出され、私たちは、予想されるデータを返しています。ただし、データがマーシャリングされて、障害が発生したことがクライアントに返されるのはそのときです。

ApplicationConfigVOクラスは別のjarファイルにありました。私たちは試して取り出して、ソースを直接サービスに含めました。変更はありません。

@ XmlSeeAlso(ApplicationConfigVO.class)をApplicationConfigVOオブジェクトに追加しましたが、変更はありません。


これは、Webサービスのコードです:

@WebService(serviceName="WebServiceConfigService") 
public class WebServiceConfig { 

private static Logger log = Logger.getLogger(WebServiceConfig.class); 

public ApplicationConfigVO[] loadWsControlMode(int applicationId,String appsId) throws Exception { 
    log.info("loadWsControlMode WebService Invoked Application ID :"+ appsId); 
    List returnList = null; 
    ApplicationConfigVO[] resultArray = null; 

    try { 
     ApplicationConfigVO modelObj = new ApplicationConfigVO(); 
     modelObj.setApplicationId(applicationId); 
     IApplicationConfigDAO daoObj = DAOFactory.getApplicationConfigDAO(); 
     returnList = daoObj.loadWsControlMode(modelObj); 

     if(null != returnList && returnList.size()>0){ 
      resultArray = new ApplicationConfigVO[returnList.size()]; 
      //Populate the ApplicationConfigVO array from arraylist 
      modelObj = new ApplicationConfigVO(); 
      for(int i=0;i<returnList.size();i++){ 
       modelObj = (ApplicationConfigVO)returnList.get(i); 
       resultArray[i] = modelObj; 
      }//End of for loop 
     } 
    } catch (Exception e) { 
     log.error(DAWebServiceUtil.stackTraceToString(e)); 
     throw e; 
    } 
    return resultArray; 
} 

これはApplicationConfigVOクラスです:

public class ApplicationConfigVO implements Serializable{ 

private int applicationId; 
private String webServiceControlMode = null; 
private int webServiceId; 
private String webServiceName = null; 
private int webServiceMethodId; 
private int opModeId; 
private String webServiceMethodDesc = null; 

private int dataBaseTypeId; 
private String dataBaseTypeDesc = null; 

    ... // various getters and setters following java bean rules 
} 
+0

loadWsControlMode()メソッドに@WebMethodアノテーションを付ける必要があります。 –

+0

私の言うことは忘れていたことですが、Windows環境では問題は発生しません。これは、Linux上で実行されている私たちの完全な環境でのみ発生します。 –

+0

まあ、私は無駄なものをいくつでも試しました。だから、私はパントして、ApplicationConfigVO []の代わりにList を返すようにメソッドを変更しました。この時点ではクラスローダーの問題だと思いますが、私は確信が持てません。どちらの場合でも、リストへの切り替えは最終的には簡単でした。うまくいけば何も私たちを噛んでくれません。 –

答えて

0

まあ、私は無駄に物事の任意の数を試してみました。だから、私はパントし、ApplicationConfigVO []の代わりにリストを返すようにメソッドを変更しました。この時点ではクラスローダーの問題だと思いますが、私は確信が持てません。どちらの場合でも、リストへの切り替えは最終的には簡単でした。うまくいけば何も私に噛みません

関連する問題