2012-05-03 13 views
10

मैं एक्सएमएल को ऑब्जेक्ट में बदलने के लिए xstream 1.4.2 का उपयोग करने की कोशिश कर रहा हूं। यह मेरे लिए पूरी तरह से ठीक काम करता है जब तक कि मैं ऑब्जेक्ट की क्लास फ़ाइल को एक अलग पैकेज में नहीं डालता, जहां मुख्य कोड चलता है। तब मुझे एक कैनोट रीसोल्व क्लास अपवाद मिलता है। मैंने setClassLoader विधि का उपयोग करके दूसरों द्वारा अनुशंसित की कोशिश की है लेकिन इससे मदद नहीं मिलती है।xstream CannotResolveClassException

Exception in thread "main" com.thoughtworks.xstream.mapper.CannotResolveClassException: result 
at com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:56) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.DynamicProxyMapper.realClass(DynamicProxyMapper.java:55) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.PackageAliasingMapper.realClass(PackageAliasingMapper.java:88) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.ClassAliasingMapper.realClass(ClassAliasingMapper.java:79) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.ArrayMapper.realClass(ArrayMapper.java:74) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.MapperWrapper.realClass(MapperWrapper.java:30) 
at com.thoughtworks.xstream.mapper.CachingMapper.realClass(CachingMapper.java:45) 
at com.thoughtworks.xstream.core.util.HierarchicalStreams.readClassType(HierarchicalStreams.java:29) 
at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:133) 
at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32) 
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1052) 
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1036) 
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:912) 
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:903) 
at main.readClass(main.java:48) 
at main.main(main.java:28) 

उत्तर: Xstream उम्मीद एक्सएमएल संरचना पैकेज जिसमें यह (वस्तु) से निकलती है के सापेक्ष किया जाना है। इसलिए xstream.alias का उपयोग xml संरचना को उपनाम करने के लिए किया जाना चाहिए।

xstream.alias("something", Something.class); 

अन्यथा Xstream "समथिंग" उम्मीद डिफ़ॉल्ट पैकेज के बजाय पैकेज यह का एक सदस्य है में होना होगा।

+0

पैकेज? पैकेज से आपका क्या मतलब है? –

+0

क्या आप –

+0

पॉप्युलेट करने के लिए उपयोग कर रहे एक्सएमएल और जावा क्लास को पोस्ट कर सकते हैं पूरी तरह से योग्य नाम अच्छी तरह से 'xstream.alias (...)' काम करता है, लेकिन यह एनोटेशन के साथ कैसे काम करता है? – lvr123

उत्तर

7

जब आप उपनाम विधि में कक्षा का नाम पास करते हैं तो आपको कक्षा के नाम के साथ पूरी तरह से योग्य क्लास नाम पास करने की आवश्यकता होती है।

उदाहरण: मान लीजिए अगर वर्ग कुछ तो पैकेज com.xyz में है आप com.xyz.Something.class पैरामीटर के रूप में पारित करने के लिए की जरूरत है

धन्यवाद

0

अपने प्रश्न के लिए यह उपयोगी होगा

डाउनलोड Xtream.jar

package businessfunctions; 


import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.List; 
import java.util.concurrent.TimeUnit; 

import objectrepository.LoginPojo; 
import objectrepository.LoginPojos; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.firefox.FirefoxDriver; 

import com.thoughtworks.xstream.XStream; 
import com.thoughtworks.xstream.io.xml.DomDriver; 

    public void readRepository(String fNmae){ 

     // Instantiate XStream Object 
     XStream xstream = new XStream(new DomDriver()); 

     // Set Person class into xstream alias 
     xstream.alias("loginpojos",LoginPojos.class); 
     xstream.alias("loginpojo",LoginPojo.class); 

     xstream.addImplicitCollection(LoginPojos.class, "loginpojos"); 

     // Create a StringBuffer var 
     StringBuffer contents = new StringBuffer(); 

     try { 
       // TODO Auto-generated method stub 


       // Set BufferReader var "in" to read from PersonXML.xml file 
       BufferedReader in = new BufferedReader(new FileReader(repoPath+fNmae)); 

       String str; 

       while ((str = in.readLine()) != null) { 
       contents.append(str); 
       } 

       in.close(); 

      } catch (IOException e) { 
        System.out.println(e.toString()); 
      } 
      // Checking the StringBuffer variable "contents" 
      System.out.println(contents); 

      String content = new String(); 

      // Put all the contents from contents to String variable content --xstream.fromXML()takes 
      //only String 
      content = contents.toString(); 

      // Convert content into XML and change and set to obj newPerson of class Person 
      LoginPojos loginPojosList = (LoginPojos)xstream.fromXML(content); 

      List<LoginPojo> loginPojoList = loginPojosList.getLoginpojos(); 
      for(LoginPojo newLogiPojo:loginPojoList){ 
      // Print out the newPerson properties 
      System.out.println("Property Label: " + newLogiPojo.getPropLabel()); 
      System.out.println("Property Name: " + newLogiPojo.getPropName()); 
      System.out.println("Property Value: " + newLogiPojo.getPropValue()); 
      } 

      } 



public static void main(String args[]) { 
     try { 
      DriverSetup ds= new DriverSetup(); 
      ds.readRepository("login.xml"); 

     }catch(Exception e){ 
      e.printStackTrace(); 
     } 

package objectrepository; 

import java.util.ArrayList; 
import java.util.List; 


public class LoginPojos { 

    public List<LoginPojo> loginpojos = new ArrayList<LoginPojo>(); 

    public List<LoginPojo> getLoginpojos() { 
     return loginpojos; 
    } 

    public void setLoginpojos(List<LoginPojo> loginpojos) { 
     this.loginpojos = loginpojos; 
    } 



} 


package objectrepository; 

public class LoginPojo { 

    private String propLabel; 
    private String propName; 
    private String propValue; 
    public String getPropLabel() { 
     return propLabel; 
    } 
    public void setPropLabel(String propLabel) { 
     this.propLabel = propLabel; 
    } 
    public String getPropName() { 
     return propName; 
    } 
    public void setPropName(String propName) { 
     this.propName = propName; 
    } 
    public String getPropValue() { 
     return propValue; 
    } 
    public void setPropValue(String propValue) { 
     this.propValue = propValue; 
    } 



} 


<loginpojos> 
<loginpojo> 
<propLabel>User name1</propLabel> 
<propName>id1</propName> 
<propValue>username1</propValue> 
</loginpojo> 
<loginpojo> 
<propLabel>User name</propLabel> 
<propName>id</propName> 
<propValue>username</propValue> 
</loginpojo> 
</loginpojos> 
+0

हाँ, यह मेरी समस्या का समाधान नहीं करता है लेकिन यह उपयोगी है। टीएनएक्स – Payedimaunt

0

समान ई समाधान करने का प्रयास आधे शाम बिताया rror।
एक्सस्ट्रीम के लिए एक ड्राइवर को चमत्कारिक रूप से मदद मिली।

XStream xstream = new XStream(new StaxDriver()); 
संबंधित मुद्दे