首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Castor和套接字

Castor和套接字
EN

Stack Overflow用户
提问于 2009-11-19 06:16:52
回答 3查看 233关注 0票数 1

一般来说,我是Castor和数据绑定的新手。我正在开发一个应用程序,在某种程度上,它需要从套接字中取出数据,并对数据进行解组以生成POJO。现在,我已经了解了套接字的内容,甚至还生成并编译了java文件,这要归功于Ant和Castor。

问题是:我将接收的数据流可能是大约9个不同对象中的一个。也就是说,我收到一个文本流(XML),它表示一个对象,其中包含我要操作的内容;同样,这取决于对象类型。如果它只是一个对象,那就很简单了:调用它上的unmarshall命令,然后继续我的快乐之路。但是,既然它可以是许多种对象中的一种,那么我知道要解组哪些对象呢?我研究了映射,但要么我没有理解,要么它看起来像是静态映射,而不是动态映射。

外面有什么帮助吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-12-11 04:40:04

我很欣赏你的见解。你们两个都给了我一些好的信息和我没有的新知识。最后,我通过一次黑客攻击让这个过程正常工作。我抓取文本流,解析出消息的根标记,然后打开它以确定要创建的正确对象。我独立地解组了我所有的对象,每个人都很高兴。

票数 0
EN

Stack Overflow用户

发布于 2009-11-24 22:37:37

你说得对,Castor需要一个静态映射。但是你可以用它来工作。您可以编写一些代码来修改传入的xml,以便Castor可以使用一个模式,而在您的客户机端,他们不必更改他们的模式。

将Castor期望的模式更改为具有公共根元素的内容,并在该模式下为您的不同对象提供九种不同的选择(我认为您可以限制它,这样模式将只允许九种选择中的一种,如果这不起作用,您可以将所有子元素设置为可选)。

然后,您可以编写代码来修改传入的xml,以便将传入的xml与该公共根元素一起包装,然后将包装的xml提供给一个流,该流由Castor解组程序读取。

至少有3种不同的方法可以实现XML包装部分: SAX、XSLT和XML库(如JDOM、DOM4J和XOM --我更喜欢使用XOM,但它们中的任何一个都可以)。

如果您已经熟悉SAX,或者如果其他方法有效,但性能不佳,那么SAX方法可能是最好的。如果我必须实现这一点,那么我将创建一个接收xml并写出xml的XMLFilter,将其堆叠在另一个将xml写入OutputStream的部分之上,并围绕解组内容编写一个包装器方法,将传入的流提供给OutputStream阅读器,将InputStream复制到另一个xmlreader (一种简单的方法是使用commons-io),然后将新的InputStream提供给Castor解组器。

对于XSLT,使用SAX不是闹着玩的,尽管XSLT有时以痛苦著称,在我看来,这似乎是一种相对简单的转换,但我也没有尝试过。我已经很久没有使用XSLT做任何事情了。我对性能也不是很确定,尽管我不会马上就写下来。

使用XOM、JDOM或DOM4J包装XML也是可能的,并且学习曲线比使用SAX或XSLT要低得多。缺点是整个XML文档往往一次被吸进内存,所以如果处理足够大的文档,可能会耗尽内存。

票数 2
EN

Stack Overflow用户

发布于 2009-11-25 20:45:50

我在Jibx中也有类似的事情,所有传入的消息对象都实现了一个基接口,该接口有一个表示消息类型的字段。

文本/xml被序列化为基本接口,然后我使用命令模式根据基本接口中定义的消息类型调用相应的业务逻辑。

不确定使用castor能否做到这一点,但可以看看Jibx,因为它的性能非常出色。

http://jibx.sourceforge.net/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1759540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档