小编eke*_*ren的帖子

自定义JAXB unmarshall进程的错误处理

假设我有一个描述根元素类架构Root包含List<Entry>Entry类有一个必填字段的名称.

以下是代码中的外观:

@XmlRootElement 
class Root{
  @XmlElement(name="entry")
  public List<Entry> entries = Lists.newArrayList();
}

@XmlRootElement 
class Entry{
  @XmlElement(name="name",required=true)
  public String name;
}
Run Code Online (Sandbox Code Playgroud)

如果我提供以下XML用于解组:

<root>
  <entry>
    <name>ekeren</name>
  </entry>
  <entry>
  </entry>
</root>
Run Code Online (Sandbox Code Playgroud)

我有一个问题,因为第二个条目不包含名称.因此,unmarshall产生null.

有没有办法自定义JAXB来解组一个Root只包含"好"条目的对象?

java xml jaxb unmarshalling

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

如何更改一堆 Java 可序列化类的包

我想在我的应用程序中更改多个类的包。一个不错的 eclipse redactor 很好,但我的一些类是可序列化的,我需要支持跨版本兼容性。

关于如何做到这一点的任何想法?可以自动/半自动完成吗?

java serialization

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

jaxb和jsr303

我正在使用jaxb构造对象的配置.到目前为止,我编写了自定义函数进行验证,但我想进入注释.

例如:

@XmlElement
public void setNumber(Integer i){
    if (i<10 || i>20) throw new IllegalArgumentException(...);
    this.number=i;
}
Run Code Online (Sandbox Code Playgroud)

上述方法的例外情况是描述性的,并给出了xml中错误的位置.

我想进入这个:

@XmlElement
@Min(10)
@Max(20)
public void setNumber(Integer i){
    this.number=i;
}
Run Code Online (Sandbox Code Playgroud)

我可以通过读取afterMarshal中的注释并根据属性注释运行验证函数来验证这一点,但后来我丢失了发生错误的实际位置(在xml中).

你有没有,我应该为这个问题使用不同的方法/框架吗?

编辑:只是为了澄清,我必须使用注释方法,因为我需要我正在编写的配置编辑器的属性约束元数据

java jaxb bean-validation

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

ios8上的iTunesMetadata.plist位置

我想确定使用我的SDK的应用程序的当前版本是否是从AppStore下载的,到目前为止我使用了以下代码:

[[NSFileManager defaultManager] fileExistsAtPath:[NSHomeDirectory() stringByAppendingPathComponent:@"iTunesMetadata.plist"]]

从ios8开始,即使版本来自AppStore,我也会收到错误.

你知道文件移动到哪里了吗?你提出的任何其他机制?

objective-c app-store ios ios8

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

Athena 分区 s3 访问日志

与 ELB 日志不同,S3 访问日志文件不是由文件夹构成的

这是一个例子:

BUCKET_NAME/ACCESS_LOGS_DEST/2018-03-15-03-05-46-2E5105C8E00951B32018-03-15-03-05-46-2E5105C8E00951B3

有没有一种简单的方法可以在 Athena 中根据日期对它们进行分区?

amazon-s3 amazon-athena

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

JAXB为简单数据类型向XmlElement添加属性

我想在从JavaBeans编组时使用JAXB向Xml Elements添加一些属性.Xml元素是简单的数据类型,如String.所以我不想创建新的类.例如,期望的输出将是:

<notifications>
<date>04/20/2011</date>
<subject creditcard_num="22678" checknum="8904">Credit Card Charge Back</subject>
<body payment_amount="34.00" return_status="charged back">some text</body>
</notifications
Run Code Online (Sandbox Code Playgroud)

我不想将主题和主体定义为单独的类.

-Anand

java annotations jaxb

3
推荐指数
1
解决办法
9639
查看次数

当从模式解组时,序列的顺序在jaxb中很重要

我有这个架构:

<xs:complexType name="foo">
  <xs:sequence>
    <xs:element name="oneBar" type="xs:string" minOccurs="0"/>
    <xs:element name="twoBar" type="xs:string" minOccurs="0"/>
  </xs:sequence>
</xs:complexType>
Run Code Online (Sandbox Code Playgroud)

当我试图解散这个

<foo>
  <oneBar>1</oneBar>
  <twoBar>2</twoBar>
</foo>
Run Code Online (Sandbox Code Playgroud)

它工作,但当我尝试解组这个xml:

<foo>
   <twoBar>2</twoBar>
   <oneBar>1</oneBar>
</foo>
Run Code Online (Sandbox Code Playgroud)

我得到一个excelption因为它关心顺序如果我试图解析相同的xml而不使用模式它在两种情况下都适用任何想法?

正如Strawberry指出的那样,如果用sc替换xs:sequence:任何顺序都不重要,你们中的任何人都知道我需要在我的课程中添加什么注释,这样才能生成xs:任何schmea

通过从xs创建类来找到解决方案:任何模式您只需要使用XmlType注释您的类并将prop命令设置为空,请参阅:

@XmlRootElement
@XmlType(name="foo",propOrder={})
public class Foo {
    @XmlElement
    public String oneBar; 
    @XmlElement
    public String twoBar;
} 
Run Code Online (Sandbox Code Playgroud)

java xsd jaxb

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

是否几乎可以在不使用java中的任何DI框架的情况下做好TDD(或BDD)?

IMO良好TDD的主要特征之一是:单独测试您的类(或实际单元).

当您这样做时,您可以在每个测试中实际测试单个行为 - 对于您遇到的单个问题,只会有一个测试.

为此,首先必须验证您的类中没有静态引用(包括构造函数AKA new关键字).

理论上,很容易不使用任何依赖注入框架并在完全隔离中测试您的类,为此您需要在构造函数中注入所有依赖项并创建将调用该new关键字的Factories类.

我发现这个理论MO在实践中实际上太难了.

我错过了这个过程中的重要内容吗?

编辑:我认为我们都应该针对一次代码更改失败.它永远不会是完美的,但它会使你的代码更接近那里,人们忘记了测试代码也是可维护的代码,测试代码的规范变化.

如果你没有瞄准那里,你将最终删除测试,这是一个糟糕的解决方案

java tdd bdd unit-testing dependency-injection

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

mongoose中嵌入文档的重复键错误索引

我试图使用mongoose运行这个简单的嵌入式文档:

var mongoose = require('mongoose');
var PageSchema = new mongoose.Schema({
    url:String
});
var AlbumSchema = new mongoose.Schema({
    pages:[ PageSchema ]
});

mongoose.model('Album', AlbumSchema);
var Album = mongoose.model('Album');
var album = new Album({pages:[{url:"1"}]});
album.save(function(err, a) {
    console.log(err);
});
Run Code Online (Sandbox Code Playgroud)

我第二次运行此代码后出现此错误:

{ 
    [MongoError: E11000 duplicate key error index: doalbums.albums.$pages.id_1  dup key: { : null }]
    name: 'MongoError',
    err: 'E11000 duplicate key error index: doalbums.albums.$pages.id_1  dup key: { : null }',
    code: 11000,
    n: 0,
    connectionId: 161,
    ok: 1 
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

javascript mongoose mongodb node.js

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

Marionette布局内部的布局

我有两个布局,如:

Layout1 = Marionette.Layout.extend({
  template: {
  type: 'handlebars',
  template: Layout1template
},
  regions: {
  region1: '#header',
  region2: '#content'
}
Run Code Online (Sandbox Code Playgroud)

});

Layout2 = Marionette.Layout.extend({
template: {
  type: 'handlebars',
  template: Layout2template
},
  regions: {
  region1: '#contenttop',
  region2: '#contentbottom'
}
Run Code Online (Sandbox Code Playgroud)

});

我想在Layout1的region2中添加Layout2.或者我想在布局中嵌套布局.任何帮助,将不胜感激.

javascript backbone.js marionette

0
推荐指数
1
解决办法
136
查看次数