好的,所以我搜索了stackoverflow并找到了关于这个问题的未回答的子主题,这就是为什么我想明确指出这个问题:
是否有任何工具可以从xsd模式生成Simple Xml库的带注释的java类?
我收到了几个xsd文件,描述了其他人开发的一个安静的Web服务返回的对象,目前我已经将这些模式转换为simple-xml带注释的类.这些将用于我的Android应用程序.最好只是自动同步对模式的任何更改并从中重新生成类.ws们有一个针对这些模式的Jackson兼容类的存储库,但是我不想使用Jackson - 我使用Spring Android,所以我更喜欢使用首选的simple-xml.必须有像JAXB的xjc工具那样的技巧.
如果没有这样的工具 - 你能想到实现一个脚本,从模式中为simple-xml生成一个.java文件吗?也许任何值得扩展的工具的提示只需要定义要生成的注释以及何时生成?
提前 - 非常感谢您的回答!
我使用的是Rest-Webservice在Android.在Web Service可以处理JSON和XML,API被描述为XSD.所以我曾经JAXB从中生成类XSD,然后我使用jackson JSON处理器JSON从我的实例生成.
问题是,that JAXB(xjc)生成带JAXB注释的类,Android但不能处理这些注释.我试图添加jaxb-api.jar到我的android项目,但Dalvik不会使用核心类.
对于我的第一个实现,我手动删除了注释.但现在XSD已经更新了,我不想每次都这样做.
你知道如何以更好的方式处理这个问题吗?是否有可能在jaxb/xjc没有注释的情况下使用,或者是否有其他代码生成器可以执行此操作?您是否知道从java类中删除注释的简单方法(即使它们以多行打印)?是否有项目的项目设置Android Eclipse,使得dalvik允许核心库?
thx,cathixx
我正在使用android上的jackson-dataformat-xml
我有一些非常基本的代码,可以在oracle jre上正常工作
JacksonXmlModule module = new JacksonXmlModule();
module.setDefaultUseWrapper(false);
XmlMapper xmlMapper = new XmlMapper(module);
Run Code Online (Sandbox Code Playgroud)
首先,我尝试了适合gradle的官方文档(由我,不确定是否正确完成):
compile 'com.fasterxml.jackson.core:jackson-core:2.5.4'
compile 'com.fasterxml.jackson.core:jackson-annotations:2.5.4'
compile 'com.fasterxml.jackson.core:jackson-databind:2.5.4'
compile 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.5.4'
compile 'org.codehaus.woodstox:woodstox-core-asl:4.4.1'
compile 'javax.xml.stream:stax-api:1.0-2'
Run Code Online (Sandbox Code Playgroud)
结果:gradle将关于将corelibraries捆绑到应用程序中的构建时间失败
...
:app:preDexDebug
trouble processing "javax/xml/stream/EventFilter.class":
Ill-advised or mistaken usage of a core class (java.* or javax.*)
when not building a core library.
...
Run Code Online (Sandbox Code Playgroud)
试图按照肖恩的回答进行第二次尝试 (基本上他用前缀名称重新包装corelibs并重建jackson-dataformat-xml以使用前缀名称)
compile 'com.fasterxml.jackson.core:jackson-core:2.1.2'
compile 'com.fasterxml.jackson.core:jackson-annotations:2.1.2'
compile 'com.fasterxml.jackson.core:jackson-databind:2.1.2'
// Repackaged XML-specific libraries
compile 'edu.usf.cutr.android.xml:jackson-dataformat-xml-android:2.1.2'
compile 'edu.usf.cutr.android.xml:stax2-api-android:3.1.1'
compile 'edu.usf.cutr.android.xml:stax-api-android:1.0-2'
compile 'edu.usf.cutr.android.xml:aalto-xml-android:0.9.8'
Run Code Online (Sandbox Code Playgroud)
复制时构建时间失败
Duplicate files copied in …Run Code Online (Sandbox Code Playgroud) 根据翻新版2.4.0更新:
新增:用于JAXB的Converter替换了现在不推荐使用的Simple XML Framework转换器。
我还没有找到有关如何实现它来代替我的简单的带XML注释的pojos的教程。
谁能分享有关如何从simplexml转换到jaxb的快速指南?
我有反序列化java-object的问题.对于反序列化,我使用SimpleXML.
@Root
public class A {
@ElementList
private ArrayList<B> b;
getters, setters...
}
public class B{
@Element(name="C", required=false)
private C c;
getters, setters...
}
public class C{
private int id;
private String name;
getters, setters...
}
Run Code Online (Sandbox Code Playgroud)
我收到了XML,它有下一个字段:
<A>
<B>
<C i:nil="true" />
</B>
</A>
Run Code Online (Sandbox Code Playgroud)
Dalvink抛出下一个异常:org.simpleframework.xml.core.AttributeException:属性'nil'在第1行的B类中没有匹配
有任何解决方案的想法吗?谢谢.
为了让Apache POI在Android上运行,我需要让Stack在Android上运行.关注这个问题:将JAXB与Google Android和@Sean Barbeau的答案结合使用.我成功地将所有jar转换为Android兼容的,包括Apache POI库,但它仍然给我这个运行时错误:
06-22 01:06:52.461 14865-14865/com.quizwiz.sharmakritya.poi E/AndroidRuntime? FATAL EXCEPTION: main
Process: com.quizwiz.sharmakritya.poi, PID: 14865
edu.usf.cutr.javax.xml.stream.FactoryConfigurationError: Provider com.bea.xml.stream.EventFactory not found
at edu.usf.cutr.javax.xml.stream.FactoryFinder.newInstance(FactoryFinder.java:72)
at edu.usf.cutr.javax.xml.stream.FactoryFinder.find(FactoryFinder.java:176)
at edu.usf.cutr.javax.xml.stream.FactoryFinder.find(FactoryFinder.java:92)
at edu.usf.cutr.javax.xml.stream.XMLEventFactory.newInstance(XMLEventFactory.java:30)
at org.apache.poi.openxml4j.opc.internal.marshallers.PackagePropertiesMarshaller.<clinit>(PackagePropertiesMarshaller.java:41)
at org.apache.poi.openxml4j.opc.OPCPackage.init(OPCPackage.java:162)
at org.apache.poi.openxml4j.opc.OPCPackage.<init>(OPCPackage.java:142)
at org.apache.poi.openxml4j.opc.Package.<init>(Package.java:37)
at org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:87)
at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:273)
at org.apache.poi.xslf.usermodel.XMLSlideShow.empty(XMLSlideShow.java:103)
at org.apache.poi.xslf.usermodel.XMLSlideShow.<init>(XMLSlideShow.java:75)
at com.quizwiz.sharmakritya.poi.PPT.onCreate(PPT.java:16)
at android.app.Activity.performCreate(Activity.java:5451)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2377)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471)
at android.app.ActivityThread.access$900(ActivityThread.java:175)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5602)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
整个错误的关键是android缺少包 …
据我所知,目前还没有适用于Android平台的JAXB实现.
我想问一个简单的问题 - Android上是否需要JAXB?
作为一名JAXB爱好者,我考虑为Android编写JAXB实现.我可能不会移植JAXB RI,因为它对于移动应用来说有点太胖了,我宁愿从头开始写它.我为JavaScript编写了一个JAXB端口,所以我知道这是可管理的.
但你们需要它吗?或者你对其他工具如SimpleXML感到满意吗?