小编lex*_*ore的帖子

使用Mojo Jaxb2 maven插件创建Java类时生成hashCode()和equals()

我正在使用的代码是使用jaxb2-maven-pluginfrom org.codehaus.mojo从XSD架构生成Java类.我正在寻找一种方法来自动实现equals()hashCode()这些类的方法,但似乎没有一种方式.我知道还有其他JAXB2 Maven插件可以做到这一点(例如http://confluence.highsource.org/display/J2B/Home),但是我想知道你们之前是否遇到过这个问题,如果有办法的话修理它.我正在使用xjc目标生成类.

java jaxb2 maven jaxb2-basics

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

在JavaScript中检查字符串是否为空(即仅包含空格)的最高性能方法?

我需要编写一个测试函数,如果给定的字符串是"空白",在某种意义上它只包含空白字符.空白字符如下:

'\u0009',
'\u000A',
'\u000B',
'\u000C',
'\u000D',
' ',
'\u0085',
'\u00A0',
'\u1680',
'\u180E',
'\u2000',
'\u2001',
'\u2002',
'\u2003',
'\u2004',
'\u2005',
'\u2006',
'\u2007',
'\u2008',
'\u2009',
'\u200A',
'\u2028',
'\u2029',
'\u202F',
'\u205F',
'\u3000'
Run Code Online (Sandbox Code Playgroud)

该函数将被调用很多次,因此它必须真正,真正高效.但是不应该占用太多内存(比如将每个字符映射到数组中的true/false).到目前为止我尝试过的事情:

  • regexp - 性能不高
  • 修剪并检查长度是否为0 - 不太高效,还使用额外的内存来保持修剪后的字符串
  • 检查包含空格字符(if (!whitespaceCharactersMap[str[index]]) ...)的哈希集的每个字符串字符- 运行良好
  • 我目前的解决方案使用硬编码比较:

    function(str) {
        var length = str.length;
        if (!length) {
            return true;
        }
        for (var index = 0; index < length; index++)
        {
            var c = str[index];
            if (c === ' ')
            {
                // skip
            }
            else if (c …
    Run Code Online (Sandbox Code Playgroud)

javascript performance

9
推荐指数
2
解决办法
834
查看次数

Unicode字符使用统计信息

我正在寻找一些关于文本文档中使用Unicode字符的统计数据(带有任何标记).谷歌搜索没有结果.

背景:我目前正在开发一种基于有限状态机的文本处理工具.字符的统计数据可能有助于搜索正确的过渡.例如拉丁字符可能是最常用的,因此首先检查它们是否有意义.

有没有人偶然收集或看到这样的统计数据?

(我不专注于特定的语言或语言环境.想像XML解析器那样的通用解析器.)

unicode

9
推荐指数
1
解决办法
1320
查看次数

如何编写一个适用于Node.js,RequireJS以及没有它们的模块

我正在开发一个用于JSON/XML处理的JavaScript库.我的库在浏览器以及Node.js(带xmldomxmlhttprequest模块)中工作.

其中一位用户最近要求提供RequireJS支持.我已经看了一下RequireJS/AMD的东西,认为这是一个很好的方法,所以我想提供这个.

但是我想保留可移植性:我的库必须在浏览器(有和没有RequireJS)以及Node.js中工作.在浏览器环境中,我不依赖xmldomxmlhttprequest因为这些东西是由浏览器本身提供的.

我的问题是:我如何实现我的库,以便它在浏览器以及没有RequireJS的Node.js中工作?

一点历史和我目前的解决方案

我最初为浏览器编写了我的库.所以它只是创建了一个全局范围的对象并将所有内容放入其中:

var Jsonix = { ... };
Run Code Online (Sandbox Code Playgroud)

后来用户要求Node.js支持.所以我补充说:

if(typeof require === 'function'){
    module.exports.Jsonix = Jsonix;
}
Run Code Online (Sandbox Code Playgroud)

我还必须导入上面提到的几个模块.我有条件地做了,取决于require功能是否可用:

if (typeof require === 'function')
{
    var XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;
    return new XMLHttpRequest();
}
Run Code Online (Sandbox Code Playgroud)

现在有了RequireJS这个故事.如果存在RequireJS,则该require函数也存在.但模块加载的工作方式不同,我必须使用define函数等.我也不能只是require因为require在RequireJS中有一个异步API.此外,如果我的库是通过RequireJS加载的,它似乎处理源代码并检测require('something')即使我有条件地执行它

if (typeof require === 'function' && typeof require.specified !== 'function) ...
Run Code Online (Sandbox Code Playgroud)

RequireJS仍然检测到require('xmlhttprequest')尝试加载相应的JS文件.

目前我正在寻求以下解决方案.

// Module factory function, AMD style …
Run Code Online (Sandbox Code Playgroud)

javascript amd node.js requirejs js-amd

9
推荐指数
2
解决办法
2460
查看次数

CodeOutline/JClass/CClass在CodeModel中的作用是什么?

我的问题涉及编写JAXB插件,特别是JAXB代码模型.

ClassOutline(及其同伴)和JClass(和同伴)和CClass(和同伴)的角色是什么?在查看相应包中的类列表时,不清楚什么是鸡,什么是鸡蛋.

我的解释是CClass(CPropertyInfo,CEnumConstant...)是由XJC在XSD的初稿解析时创建的.然后,一些神奇的发生,这种模型转化为JClass(JFieldVar,JEnumConstant,...),这转变过程中的自定义应用.然后调用插件.ClassOutline用作这两个模型之间的桥梁.总之看起来非常复杂.

通过这些并行模型,我相信可以通过多种方式获得相同的信息.例如,类字段类型:

  • JClass#fields()→交通JFieldVar#type→交通JType
  • CClassInfo#getProperties()→交通CPropertyInfo#baseType→交通JType

我正在寻找上述模型生命周期的详细解释.谢谢.

jaxb xjc sun-codemodel jcodemodel

8
推荐指数
1
解决办法
1355
查看次数

验证没有中间证书的签名

是否可以验证仅在层次结构中具有祖先或根证书的签名?

免责声明:我是证书处理的新手,所以请原谅天真的术语.

考虑以下情况.

  • 我们有两方(让我们称之为身份提供商的IdP和服务提供商的SP)和一些中央证书颁发机构CA,它肯定是IdP和SP都信任的.
  • CA拥有IdP和SP都知道的证书CertCA(在某些别名下导入IdP和SP的密钥库)
  • Out CA为IdP(CertIdP)颁发一个证书,为SP(CertSP)颁发一个证书.
  • IdP在其密钥库中具有CertIdP并且知道密码,因此IdP可以使用CertIdP对消息进行签名
  • SP/CertSP也是如此
  • 现在让我们假设SP不知道CertIdP并且IdP不知道CertSP.他们只知道用于签署CertIdP和CertSP的CertCA.(据我所知,我们有证书层次结构CertIdP - > CertCA < - CertSP here-)
  • IdP想要向SP发送签名消息.它会创建一条消息,然后使用CertIdP对其进行签名.
  • SP使用CertIdP接收IdP签名的消息.如上所述,SP没有CertIdP,只有父证书CertCA.

我的问题是:SP是否可以验证CertIdP签名的邮件的签名只有其父证书CertCA?

背景故事,为什么要这样.

我们正在使用PicketLink实现基于SAML的SSO.我们使用PicketLink的SAML2SignatureValidationHandler来验证签名.为此,服务提供商(SP)需要在其密钥库中具有IdP证书.当签名的SAML断言传递给SP时,此处理程序使用IdP的证书来验证签名.

上述过程运作良好,但我们有一些组织问题.此过程假定SP具有IdP的验证证书.如果出现问题,必须在SP端更换IdP的证书.我们可能会有大量的SP(当数不是数千时),所以这是一个很大的努力.

由于CertIdP和CertSP均由IdP和SP明确信任的相同授权机构(CA)颁发,因此我们认为可以使用CA的证书进行签名验证.如果这样做,这可能消除了在IdP和SP之间交换证书的需要.CA的证书也非常"长寿",所以如果只需要在永恒中交换一次(永恒,在我们的情况下大约10 - 20年).

但是,我不确定在技术上是否可以验证使用CertIdP签名的签名只有父级CertCA.可能吗?或者我们在这里完全错误的轨道?

如果它是相关的,我们在SP方面的Java/JBoss平台上,IdP是第三方软件.

更新:

这是我从IdP获得的签名:

    <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:SignedInfo>
            <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
            <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
            <ds:Reference URI="#_...">
                <ds:Transforms>
                    <ds:Transform
                        Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
                    <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
                        <ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"
                            PrefixList="ds saml samlp" />
                    </ds:Transform>
                </ds:Transforms>
                <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
                <ds:DigestValue>r...=</ds:DigestValue>
            </ds:Reference>
        </ds:SignedInfo>
        <ds:SignatureValue>X...==</ds:SignatureValue>
    </ds:Signature>
Run Code Online (Sandbox Code Playgroud)

certificate digital-certificate saml saml-2.0 picketlink

8
推荐指数
1
解决办法
3548
查看次数

如何在纯JPA中为本机查询配置默认数据库模式?

我们的情况如下:

  • 我们使用(必须纯粹的)JPA来持久化我们的企业应用程序.
  • 由于性能原因,我们在这里使用了许多相当复杂的本机查询.
  • 访问数据库(Oracle 11g)时,我们使用的数据库用户APP_ACCESS与表(APP_OWNER)的"所有者"不同.这是数据库管理的一项硬性要求.
  • 目前,模式名称(APP_OWNER)被硬编码到本机查询中,a-la:

"SELECT * FROM " + DatabaseSchemaConstants.SCHEMA_NAME + ".LOCATION"

毋庸置疑,我们对此硬编码并不特别满意,因为"所有者"用户名的更改意味着代码中的更改 - 这对于维护来说绝对不利.

所以这是我的问题:

我们如何在纯JPA中为本机查询配置默认数据库模式?

这是我到目前为止发现的:

如何在JPA配置中设置默认架构名称?

具体来说,这个答案提出了持久性单元和orm.xml文件的组合:

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
                 version="1.0">
 <persistence-unit-metadata>

  <persistence-unit-defaults>
   <schema>myschema</schema>
  </persistence-unit-defaults>
 </persistence-unit-metadata>
</entity-mappings>
Run Code Online (Sandbox Code Playgroud)

但我认为这不适用于本机查询(我们目前正在测试它).这里的另一个问题orm.xml是不是真的用于配置.(但它仍然比Java代码中的硬编码更好).

另一篇帖子有类似答案:

JPA - EclipseLink - 如何更改默认架构

还有一个问题:

从会话工厂以编程方式获取hibernate默认模式名称?

看到这个建议使用的答案{h-schema}.看起来很合适,但它是特定于Hibernate的.我们想继续使用"纯JPA".另一个问题是我在Hibernate文档中找不到{h-schema}的任何提及,因此我们依赖此功能是不安全的.

是否有标准的JPA方式为所有内容设置默认数据库架构 - JPA entites和查询以及本机查询

或者,如果我们能够在我们的本机查询中使用配置中的某些"参数"或"设置",则可以解决此问题.

java oracle hibernate jpa native-sql

8
推荐指数
1
解决办法
6681
查看次数

从Spring/MongoDB findAndModify返回旧实体和新实体

我们通过Spring Data使用MongoDB,并依靠findAndModify操作来更新现有实体或创建新实体.

findAndModify我们可以配置为使用返回实体的旧状态或新实体returnNew(...).

有没有办法从旧的和新的实体返回findAndModify

我们需要在更新之前和之后比较实体状态,这就是我们需要两个实例的原因.

目前我们正在诉诸requireNew(false)并手动更新旧实例的副本,如下所示:

public Pair<Data> saveItems(String id, List<Item> items) {
    final Query findById = ...;

    final Update update = new Update();
    // This is what we actually update
    update.set(ENTITY_FIELD_ITEMS, newItems);
    update.inc(ENTITY_FIELD_VERSION, 1);
    // Try updating and return the old data 
    final Data oldData = operations.findAndModify(findById, update,
        FindAndModifyOptions.options().upsert(true).returnNew(false), Data.class);

    // Copy or create new instance
    final Data newData;
    if (oldData == null) {
        newData = new Data(id);
    } …
Run Code Online (Sandbox Code Playgroud)

spring mongodb mongodb-java spring-data mongodb-query

8
推荐指数
1
解决办法
1364
查看次数

将Java 8 lambda谓词与逻辑运算符组合在一起

我有一个Stream<SomeClass> stream,而SomeClass具有布尔方法isFoo()isBar().

我想,以检查数据流中的所有元素同时拥有isFoo()isBar()等于true.我可以通过SomeClass:isFooSomeClass::isBarlambdas 单独检查这个条件.

但是我如何将这两个lambdas与像and/ 这样的逻辑运算符结合起来&&

一个明显的方法是写一个额外的lambda:

stream.allMatch(item -> item.isFoo() && item.isBar());
Run Code Online (Sandbox Code Playgroud)

但是我想避免写一个额外的lambda.

另一种方式是投射到Predicate<? super SomeClass>:

stream.allMatch(((Predicate<? super SomeClass>) SomeClass::isFoo).and(SomeClass::isBar));
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法 - 没有演员表和明确的lambdas?

java lambda java-8

8
推荐指数
2
解决办法
9309
查看次数

如果直接或间接地从另一个方法调用某个方法,如何在Eclipse中查找?

如果可以从另一个方法中直接或间接地调用或访问某些方法,如何在Eclipse中查找?

假设我想重构A.one()可能会受到副作用的负面影响D.four().因此,我想知道是否D.four()可以从中调用A.one().我可以看到A.one()使用Call Hierarchy 调用哪些方法.我可以导航调用树,最终找到A.one()调用B.two()哪个调用的C.three()调用D.four().

在Eclipse中是否有办法以某种方式自动进行此搜索?

PS."调用层次结构对话框"中有一个"过滤器..."选项,但它只隐藏匹配的名称.

java eclipse

7
推荐指数
1
解决办法
5748
查看次数