标签: xstream

在访问servlet时,在Tomcat java.lang.NoClassDefFoundError下?

我正在Eclipse中编写Web应用程序,我正在使用XStream序列化库来生成My JSON.

我已经封装了在我的servelet调用的类中构建JSON的代码.然后封装类有一个主要的测试方法,当我运行它时,一切似乎工作正常.

但是,当我使用调用我的servelet中的类时,我收到一个java.lang.NoClassDefFoundError错误,说我没有加载XStream库.我假设我的构建路径错误,但我已将XStream库设置为项目的构建路径,因此据我所知它应该可行.

这里可能出现什么问题?

以下是确切的例外:

java.lang.ClassNotFoundException: com.thoughtworks.xstream.io.HierarchicalStreamDriver
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
    at SecurePaymentAjaxData.doPost(SecurePaymentAjaxData.java:44)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)
Run Code Online (Sandbox Code Playgroud)

这是使用xstream类的相关代码:

XStream xstream = new XStream(new JettisonMappedXmlDriver());
xstream.setMode(XStream.NO_REFERENCES);
xstream.alias("CallDataUpdate", CallDataUpdate.class);
xstream.alias("CardStatus", CardStatus.class);
String jsonData = xstream.toXML(updateData);
Run Code Online (Sandbox Code Playgroud)

我强调这个代码在作为java应用程序运行时工作正常,我确定它与加载库有关,我只是不知道我哪里出错了.

java eclipse tomcat xstream

6
推荐指数
3
解决办法
2万
查看次数

如何让XStream很好地输出Scala列表?我可以写自定义转换器吗?

这段代码:

println(new XStream.toXML(List(1,2,3)))
Run Code Online (Sandbox Code Playgroud)

生成这个XML:

<scala.coloncolon serialization="custom">
  <unserializable-parents/>
  <scala.coloncolon>
    <int>1</int>
    <int>2</int>
    <int>3</int>
    <scala.ListSerializeEnd/>
  </scala.coloncolon>
</scala.coloncolon>
Run Code Online (Sandbox Code Playgroud)

相反,我想这样:

<list>
  <int>1</int>
  <int>2</int>
  <int>3</int>
</list>
Run Code Online (Sandbox Code Playgroud)

这类似于通用java集合的序列化方式.什么是最好的方法呢?

通过实现我自己的转换器,我已经完成了大部分工作,但是我坚持使用unmarshal方法,它不清楚如何实例化一个空列表...

class ListConverter( _mapper : Mapper )  extends AbstractCollectionConverter(_mapper) {
  /** Helper method to use x.getClass
   * 
   * See: http://scalide.blogspot.com/2009/06/getanyclass-tip.html
   */
  def getAnyClass(x: Any) = x.asInstanceOf[AnyRef].getClass

  def canConvert( clazz: Class[_]) = {       
    classOf[::[_]] == clazz
  }

  def marshal( value: Any, writer: HierarchicalStreamWriter, context: MarshallingContext) = {
    val list = value.asInstanceOf[List[_]]
    for ( item <- list ) {      
      writeItem(item, context, …
Run Code Online (Sandbox Code Playgroud)

generics scala list xstream

6
推荐指数
1
解决办法
1750
查看次数

xstream - 在自定义转换器中重用默认转换器

我正在使用xstream来处理xml字符串,但是对象的某些字段在版本之间发生了变化,因此我正在实现自定义转换器.下面列出了字段更改的摘要,只有前两种字段类型不同.

Field    type1      type2
a        short      String
b        String     Object
c        List       List
d        Object     Object
.
.
.
x        String     String
Run Code Online (Sandbox Code Playgroud)

我的当前转换器被实现为专门处理每个字段,这导致unmarshal()方法中的大量"else if"条件

package a.b.c.reports;

import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;

public class MyConverter implements Converter {

..

@Override
public Object unmarshal(HierarchicalStreamReader reader,UnmarshallingContext context) {

    while (reader.hasMoreChildren()) {
        reader.moveDown();
        if(reader.getNodeName().equals("a"))
        {
            a = reader.getValue();
        }
        else if (reader.getNodeName().equals("b")) 
        {
            b = (Object) context.convertAnother(reader, Object.class);
        } 
        else if(reader.getNodeName().equals("c"))
        {
            a = reader.getValue();
        }
        ..
        ..
    } …
Run Code Online (Sandbox Code Playgroud)

java xstream

6
推荐指数
1
解决办法
1494
查看次数

带有HashMap的Java XStream

我想使用XStream将java哈希转换为json哈希.我觉得这应该比看起来容易.我正在寻找的是一种方法:

Map<String, String> map = new HashMap<String, String>();
map.put("first", "value1");
map.put("second", "value2");
Run Code Online (Sandbox Code Playgroud)

成为

{'first' : 'value1', 'second' : 'value2' }
Run Code Online (Sandbox Code Playgroud)

关闭我将它转换为一系列数组.

XStream xstream = new XStream(new JettisonMappedXmlDriver() {
    public HierarchicalStreamWriter createWriter(Writer writer) {
        return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE);
    }
});

xstream.toXML(map);
Run Code Online (Sandbox Code Playgroud)

变成了

[["first", "value1"], ["second", "value2"]]
Run Code Online (Sandbox Code Playgroud)

我觉得将java哈希转换为json哈希应该是直截了当的.我错过了什么吗?

java json xstream

6
推荐指数
1
解决办法
1985
查看次数

将日期字段格式化为XStream中的字符串

我有一个日期字段,当使用XStream转换为xml 时,以毫秒和区域给出时间.我只需将其转换或格式化为"MMMM dd, yyyy HH:mm:ss".如何使用XStream做到这一点?我不想改变吸气剂和制定者.谢谢.

我的课:

    public class Datas {
    private String name;
    private Calendar dob;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Calendar getDob() {
        return dob;
    }

    public void setDob(Calendar dob) {
        this.dob = dob;
    }

    public static void main(String[] args) {
        Datas datas = new Datas();
        datas.setName("Ahamed");
        datas.setDob(Calendar.getInstance());
        XStream stream = new XStream();
        System.out.println(stream.toXML(datas));
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

<Datas>
  <name>Ahamed</name>
  <dob>
    <time>1329081818801</time>
    <timezone>Asia/Calcutta</timezone>
  </dob> …
Run Code Online (Sandbox Code Playgroud)

java format date xstream

6
推荐指数
2
解决办法
1万
查看次数

com.thoughtworks.xstream.mapper.CannotResolveClassException

这是我尝试XStream的第一次.但是当我尝试解析我的xml文件时,我得到了这个异常:

Exception in thread "main" com.thoughtworks.xstream.mapper.CannotResolveClassException: root
    at com.thoughtworks.xstream.mapper.DefaultMapper.realClass(DefaultMapper.java:79)
    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:1157)
    at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1141)
    at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1012)
    at com.mmm.transport.se.xmleditor.xml.TestXML.test(TestXML.java:20)
    at com.mmm.transport.se.xmleditor.domain.Main.main(Main.java:13)
Run Code Online (Sandbox Code Playgroud)

所以我们可以看到错误发生在我的testXML类的第20行.它看起来像这样:

public class TestXML {

    public void test() throws FileNotFoundException {

        FileReader reader …
Run Code Online (Sandbox Code Playgroud)

java xstream

6
推荐指数
1
解决办法
4万
查看次数

使用XStream时ArrayIndexOutOfBoundsException

我不确定这是怎么回事,但我正在运行的程序给了我一个奇怪的错误.我在每个循环上得到一个ArrayIndexOutOfBoundsException:-1.整个错误如下:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at com.thoughtworks.xstream.core.util.OrderRetainingMap.entrySet(OrderRetainingMap.java:77)
at java.util.HashMap.putMapEntries(HashMap.java:511)
at java.util.HashMap.putAll(HashMap.java:784)
at com.thoughtworks.xstream.core.util.OrderRetainingMap.<init>(OrderRetainingMap.java:36)
at com.thoughtworks.xstream.converters.reflection.FieldDictionary.buildMap(FieldDictionary.java:135)
at com.thoughtworks.xstream.converters.reflection.FieldDictionary.fieldsFor(FieldDictionary.java:76)
at com.thoughtworks.xstream.converters.reflection.PureJavaReflectionProvider.visitSerializableFields(PureJavaReflectionProvider.java:126)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doMarshal(AbstractReflectionConverter.java:81)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshal(AbstractReflectionConverter.java:72)
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:69)
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:58)
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:43)
at com.thoughtworks.xstream.core.TreeMarshaller.start(TreeMarshaller.java:82)
at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.marshal(AbstractTreeMarshallingStrategy.java:37)
at com.thoughtworks.xstream.XStream.marshal(XStream.java:895)
at com.thoughtworks.xstream.XStream.marshal(XStream.java:884)
at com.thoughtworks.xstream.XStream.toXML(XStream.java:857)
at com.thoughtworks.xstream.XStream.toXML(XStream.java:844)
at unl.cse.assignments.DataConverter.output(DataConverter.java:210)
at unl.cse.assignments.DataConverter.main(DataConverter.java:121)
Run Code Online (Sandbox Code Playgroud)

第210行是pw.print行:

for(Product p : products)
    {
        if(AwardTicket.class.isInstance(p)){
            xstream.alias("awardTicket", AwardTicket.class);
            pw.print(xstream.toXML(p) + "\n");
        }
}
Run Code Online (Sandbox Code Playgroud)

(第121行只调用输出)

我一直在调查这个错误很长一段时间,我无法弄清楚它的原因.我认为xstream有问题,但我尝试了其他输出.

java xml xstream

6
推荐指数
1
解决办法
1721
查看次数

Spring服务中的Drools XStream

我开始使用流口水,我想在spring-boot服务中使用它,但是即使对于一个简单的例子,我在Xstream上也没有这种方法错误。我错过了什么?

  Caused by: java.lang.NoSuchMethodError: com.thoughtworks.xstream.XStream.setupDefaultSecurity(Lcom/thoughtworks/xstream/XStream;)V
        at org.kie.internal.xstream.XStreamUtils.internalCreateXStream(XStreamUtils.java:58)
        at org.kie.internal.xstream.XStreamUtils.createXStream(XStreamUtils.java:38)
        at org.drools.compiler.kproject.models.KieModuleModelImpl$kModuleMarshaller.<init>(KieModuleModelImpl.java:170)
        at org.drools.compiler.kproject.models.KieModuleModelImpl$kModuleMarshaller.<init>(KieModuleModelImpl.java:169)
        at org.drools.compiler.kproject.models.KieModuleModelImpl.<clinit>(KieModuleModelImpl.java:167)
        at org.drools.compiler.kie.builder.impl.ClasspathKieProject.fetchKModule(ClasspathKieProject.java:179)
        at org.drools.compiler.kie.builder.impl.ClasspathKieProject.fetchKModule(ClasspathKieProject.java:141)
        at org.drools.compiler.kie.builder.impl.ClasspathKieProject.discoverKieModules(ClasspathKieProject.java:112)
        at org.drools.compiler.kie.builder.impl.ClasspathKieProject.init(ClasspathKieProject.java:84)
        at org.drools.compiler.kie.builder.impl.KieContainerImpl.<init>(KieContainerImpl.java:142)
        at org.drools.compiler.kie.builder.impl.KieServicesImpl.newKieClasspathContainer(KieServicesImpl.java:135)
        at org.drools.compiler.kie.builder.impl.KieServicesImpl.getKieClasspathContainer(KieServicesImpl.java:101)
        at org.drools.compiler.kie.builder.impl.KieServicesImpl.getKieClasspathContainer(KieServicesImpl.java:79)
Run Code Online (Sandbox Code Playgroud)

spring drools xstream

6
推荐指数
2
解决办法
1465
查看次数

XStream:将XML的一部分保留为XML

我有以下XML:

<patient>
    <name>Mr. Sick</name>
    <report>
        <paragraph><bold>Conclusion</bold>text...</paragraph>
    </report>
</patient>
Run Code Online (Sandbox Code Playgroud)

我想将此转换为类患者的实例,如下所示:

Class Patient {
    String name = "Mr. Sick";
    String report = "<paragraph><bold>Conclusion</bold>text...</paragraph>";
}
Run Code Online (Sandbox Code Playgroud)

是否可以使用XStream仅转换部分XML并将报告字段保留为XML格式?怎么做到呢?

java xml xstream

5
推荐指数
1
解决办法
1678
查看次数

XStream非法反射访问升级到Java 10后出现问题

警告:发生了非法的反射访问操作警告:com.thoughtworks.xstream.core.util.Fields(文件:libraries / xstream-1.4.10.jar)对字段java.util.TreeMap.comparator的非法反射访问

java xstream

5
推荐指数
0
解决办法
1908
查看次数

标签 统计

xstream ×10

java ×8

xml ×2

date ×1

drools ×1

eclipse ×1

format ×1

generics ×1

json ×1

list ×1

scala ×1

spring ×1

tomcat ×1