我正在使用Retrofit 2.2.0和Retrofit SimpleXML Converter 2.2.0.我用方法添加SimpleXmlConverter到Retrofit实例中addConverterFactory.
问题是,当我收到响应时,它会收到以下错误
java.lang.RuntimeException:org.simpleframework.xml.core.ElementException:元素'Body'在第1行的ResponseEnvelope类中没有匹配项
我应该得到这样的XML响应:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns:autenticarUsuarioPorEmailResponse xmlns:ns="http://business.curitiba.org.br">
<ns:return xsi:type="ax2471:AutenticaUsuarioPorEmailSaida" xmlns:ax2471="http://saidas.curitiba.org/xsd" xmlns:ax2469="http://entities.curitiba.org/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ax2467="http://entradas.curitiba.org/xsd">
<ax2471:idCredencial>3282</ax2471:idCredencial>
<ax2471:tokenAcesso>635E3DA9-7C02-4DB7-9653-E7688C66B02C</ax2471:tokenAcesso>
</ns:return>
</ns:autenticarUsuarioPorEmailResponse>
</soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)
@Root(name = "soapenv:Envelope")
@Namespace(prefix = "soapenv", reference = "http://schemas.xmlsoap.org/soap/envelope/")
public class ResponseEnvelope {
@Element(name = "soapenv:Body", required = false)
private ResponseBody body;
public ResponseBody getBody() {
return body;
}
public void setBody(ResponseBody body) {
this.body = body;
}
}
Run Code Online (Sandbox Code Playgroud)
@Root(name = "soapenv:Body", strict = false)
public class …Run Code Online (Sandbox Code Playgroud) 您将如何使用简单的XML序列化Map ,使其看起来像:
<elem foo="value">key</elem>
Run Code Online (Sandbox Code Playgroud)
而不是正常的
<elem foo="key">value</elem>
Run Code Online (Sandbox Code Playgroud)
(地图是一对多的,因为这将由人类编辑,我希望它更清晰.)
[编辑]:不修复.
使用simple-xml时,有没有办法让它忽略无法识别的节点?
当我需要访问已编译的Android XML资源时,似乎我无法使用,openRawResource(resId)因为它给了我一个编译的二进制文件.
我发现获取XML的唯一方法是使用getXml(resId)返回XmlResourceParser(实现XmlPullParser).
如何从Android资源中方便地反编译复杂的编译XML(但不是很大)?
我试图破解Simple XML框架:
val serializer = new Persister()
serializer.read(classOf[AFoo],
new NodeReader(new PullReader(r.getXml(resId))).readRoot)
Run Code Online (Sandbox Code Playgroud)
(上面的Scala代码已经过简化.)
然而它失败了:
java.lang.RuntimeException: getPrefix not supported
at android.content.res.XmlBlock$Parser.getPrefix(XmlBlock.java:156)
at org.simpleframework.xml.stream.PullReader$Start.<init>(PullReader.java:373)
at org.simpleframework.xml.stream.PullReader.start(PullReader.java:143)
at org.simpleframework.xml.stream.PullReader.read(PullReader.java:109)
at org.simpleframework.xml.stream.PullReader.read(PullReader.java:117)
at org.simpleframework.xml.stream.PullReader.next(PullReader.java:89)
at org.simpleframework.xml.stream.NodeReader.readElement(NodeReader.java:111)
at org.simpleframework.xml.stream.NodeReader.readRoot(NodeReader.java:85)
Run Code Online (Sandbox Code Playgroud)
getPrefix?Node从中构建树的Scala库XmlPullParser?(因此可以使用Scala投影函数查询它.)android scala xml-parsing android-resources simple-framework
我遇到了一个非常奇怪的问题,浏览器的HTTP请求似乎被Restlet服务器使用的Simple连接器丢弃.
服务器设置:
服务器正在为浏览器提供网页,并使用javascript的XMLHttpRequest来获取更新.但是,其中一些XMLHttpRequests并未完成.Chrome的javascript调试程序显示这些的"失败"状态; Firefox的调试器记录完成时间,没有HTTP状态代码和记录的响应.数据包嗅探器指示有问题的请求实际发送到服务器,但服务器从不响应.调试显示这些请求永远不会到达我们的服务器代码.
我已经验证了Firefox,Chrome以及IE的问题.所有三个浏览器(最新版本)都遇到了这个问题.而且,每个浏览器都重复且可重复地具有完全相同请求的问题.但是这组请求在三种浏览器之间有所不同.
真正奇怪的是,当使用服务器的机器名称(测试在LAN上运行)时,问题确实浮出水面,但在使用机器的IP地址时却没有.从摘要切换回基本身份验证也会使问题消失,就像用Jetty替换Simple连接器一样.
我现在倾向于转向Jetty,但我仍然想知道发生了什么.有没有人见过这样的行为,或者对这里出了什么问题有所了解?
我无法在Android Studio中制作项目.编译项目时我有一些错误:
Gradle: error: package org.simpleframework.xml does not exist
Gradle: error: cannot find symbol class Element
Gradle: error: cannot find symbol class Element
Run Code Online (Sandbox Code Playgroud)
我手动添加jar,从Dependencies添加到项目.
如何修复?!
好的,我解决了.问题解决了.我手动添加到配置文件库libs/simple-xml-2.7.jar.
dependencies {
compile files('libs/android-support-v4.jar', 'libs/commons-net-3.3.jar', 'libs/simple-xml-2.7.jar')
}
Run Code Online (Sandbox Code Playgroud) 我正在使用Android中的RetroFitSimple XMLFramework来模拟SOAP响应,如下所示:
XML:
<soap:Envelope
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<BuslocationResponse
xmlns="AT_WEB">
<Version>1.0</Version>
<Responsecode>0</Responsecode>
<Input>
<Route>801</Route>
<Direction>N</Direction>
</Input>
<Vehicles>
<Vehicle>
<Route>801</Route>
<Direction>N</Direction>
<Updatetime>09:42 PM</Updatetime>
<Vehicleid>5007</Vehicleid>
<Block>801-06</Block>
<Adherance>-2</Adherance>
<Adhchange>S</Adhchange>
<Reliable>Y</Reliable>
<Offroute>N</Offroute>
<Stopped>N</Stopped>
<Inservice>Y</Inservice>
<Speed>20.61</Speed>
<Heading> 3</Heading>
<Routeid>44916</Routeid>
<Positions>
<Position>30.221222,-97.765007</Position>
<Position>30.218363,-97.766747</Position>
<Position>30.215282,-97.768715</Position>
<Position>30.212505,-97.770485</Position>
<Position>30.204943,-97.774765</Position>
<Position>30.204035,-97.775078</Position>
</Positions>
</Vehicle>
</Vehicles>
</BuslocationResponse>
</soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)
真的,我关心的只是车辆的集合.似乎我只能模拟BusLocationResponse并通过声明来跳过肥皂信封和身体
Java的:
@Root(strict=false)
@Path("Envelope/Body/BuslocationResponse")
public class BusLocationResponse {
@Element(name="Responsecode")
public int responseCode;
@ElementList
@Path("Envelope/Body/BuslocationResponse/Vehicles")
public List<CapVehicle> vehicles;
}
Run Code Online (Sandbox Code Playgroud)
这只会产生错误:
org.simpleframework.xml.core.ValueRequiredException: Unable to satisfy
@org.simpleframework.xml.Element(data=false, name=Responsecode, required=true, …Run Code Online (Sandbox Code Playgroud) 我想使用 @PATH 来保持元素的顺序,但是,有一些可选元素(required = false),并且当它们的值为 NULL 时我无法隐藏这些元素。
@Order(elements={"Name", "Nickname"})
public class InfosType
{
@Element
@Path("Name")
private String name;
@Element(required=false)
@Path("Nickname")
private String nickname;
}
Run Code Online (Sandbox Code Playgroud)
即使昵称= NULL,xml文件也总是有昵称字段:
<Name>David</Name>
<Nickname/>
Run Code Online (Sandbox Code Playgroud)
但我想要这个:
<Name>David</Name>
Run Code Online (Sandbox Code Playgroud)
我的目标是序列化 xml 文件并保持可选元素的顺序。
对我有什么建议吗(Android 的一些东西,比如 simpleframework 可以帮助我,等等)?谢谢。
在为Android改造中集成Simple XML转换器时,我遇到了一些问题.
1).在build.gradle中添加"compile('com.squareup.retrofit:converter-simplexml:1.9.0')"后,我收到了编译错误.
错误报告:信息:Gradle任务[:app:assembleDebug]警告:调试将忽略依赖关系xpp3:xpp3:1.1.3.3,因为它可能与Android提供的内部版本冲突.如果出现问题,请使用jarjar重新打包以更改类包警告:依赖xpp3:xpp3:1.1.3.3因发布而被忽略,因为它可能与Android提供的内部版本冲突.如果有问题,请用jarjar重新打包以更改类包
2).我通过提供根类名称在http://pojo.sodhanalibrary.com/Convert的帮助下创建了Java Schemas .我继续为一个或另一个元素获取InstantiateException或ElementException,并且mazorly retrofit.converter.ConversionException:org.simpleframework.xml.core.ValueRequiredException:无法满足@ org.simpleframework.xml.Element(data = false,name = description字段"description"上的,required = true,type = void).许多字段的错误相同.
我需要将XML字符串解析为对象。我会使用SimpleXML,但是出现错误Duplicate annotation of name 'link' on field 'url' private java.lang.String com.example.rogedormans.xmlreader.XML.Alert.Channel.url。
具有相同问题的示例XML:
<rss........>
<channel>
<title>The Title</title>
<link>http://www.someurl.com</link>
<description>Some description</description>
<atom:link href="http://dunno.com/rss.xml" rel="self" type="application/rss+xml"/>
....
....
</channel>
</rss>
Run Code Online (Sandbox Code Playgroud)
我GOOGLE了一番,发现这个,这个和这个计算器的文章,但没有为我工作。我也看过了简单的XML文档,但我不能得到它的工作。
如何将两个“链接”项都放入对象?(我认为这与名称空间有关,但是呢?)
一个代码示例会很好!!!
simple-framework ×10
android ×6
java ×4
retrofit ×3
xml-parsing ×2
converter ×1
gradle ×1
integration ×1
option-type ×1
restlet ×1
scala ×1
soap ×1
xml ×1