小编Sha*_* D.的帖子

如何在Java中获取受信任的根证书列表?

我希望能够在Java应用程序中以编程方式访问所有受信任的根证书.

我正在查看密钥库接口,但我希望得到JRE隐含的可信根列表.

这可以随处访问吗?

java certificate keystore

32
推荐指数
2
解决办法
4万
查看次数

是否有关闭的现有FileInputStream删除?

是否存在FileInputStream关闭时自动删除基础文件的现有方法?

我打算让自己的实用程序类扩展FileInputStream并自己完成,但我有点惊讶的是没有已经存在的东西.

编辑:用例是我有一个Struts 2动作,它返回InputStream一个页面的文件下载.据我所知,当动作完成或者FileInputStream不再使用时我没有得到通知,我不希望生成的(可能很大的)临时文件被遗留下来.

问题不是Struts 2特定的,所以我最初没有包含该信息并使问题复杂化.

java file-io temporary-files

21
推荐指数
3
解决办法
2万
查看次数

使用当前时间条件处理单元测试

我正在为我正在进行的项目中的某些实用程序类设置单元测试,其中一个类(包含许可信息)有一个方法可以根据当前时间做一些确定.

即许可证包含到期日期,许可证字符串验证该日期,但是查看许可证是否过期的实际逻辑基于当前时间.

public boolean isValid()
{
    return isLicenseStringValid() && !isExpired();
}

public boolean isExpired()
{
    Date expiry = getExpiryDate();
    if( expiry == null ) {
        return false;
    }

    Date now = new Date();

    return now.after( expiry );
}
Run Code Online (Sandbox Code Playgroud)

所以,我不知道该怎么做,因为'new Date()'不是一个静态的标准.

  1. 我不应该费心去测试'isValid',只是分别测试'isLicenseStringValid()'和'getExpiryDate()'函数吗?
  2. 我是否只是在测试中使用许可证密钥,并且到期时间很长,这样我就可以在到期时切换作业了?
  3. 我是否试图将'new Date()'模拟为某些'getCurrentTime()'方法,以便我可以假装它现在是什么时候?

其他人通常会做什么时间条件的测试?

java tdd junit unit-testing mocking

15
推荐指数
2
解决办法
3678
查看次数

我可以为单个查询设置JDBC超时吗?

我在Tomcat上有一个Web应用程序,它处理数据库连接池,并使用Spring JDBCTemplate执行查询.已经请求我实现一个状态页面,该页面将由心跳过程监视,以确定服务器是否一切正常.

作为其中的一部分,我想进行数据库查询以确定与数据库的连接是否正常.理想情况下,因为它只是一个'选择1',我希望它在10秒内快速返回,以指示如果DB在那段时间没有响应则失败.

但是,我不希望更改我的连接以快速执行正常请求.

有没有办法使用原始JDBC或Spring JDBC包装器设置每个查询超时?

sql spring timeout jdbc jdbctemplate

15
推荐指数
2
解决办法
2万
查看次数

如果通过Java中的DNS无法解析,如何获取本地主机名?

这听起来像以前应该问过的东西,它有一些,但我希望获得机器的本地主机名和IP地址,即使它不能通过DNS解析(在Java中).

我可以通过迭代来获得没有解决方案的本地IP地址NetworkInterfaces.getNetworkInterfaces().

我发现这个问题的任何答案表明使用getLocalHost()

InetAddress localhost = java.net.InetAddress.getLocalHost();
hostName = localhost.getHostName();
Run Code Online (Sandbox Code Playgroud)

UnknownHostException如果主机名无法通过DNS解析,则抛出一个.

如果没有在幕后进行DNS查找,是否无法获取本地主机名?

edit:检索到的IP地址是10.4.168.23例外java.net.UnknownHostException: cms1.companyname.com: cms1.companyname.com(主机名已更改为伪匿名),hosts文件不包含主机名.但它确实知道它的主机名,所以我不知道为什么我不能在没有抛出异常的情况下得到它.

java hostname

15
推荐指数
3
解决办法
2万
查看次数

需要一个通知/仪表板系统的框架?

我被要求在Cloud Java应用程序中实现通知系统.前提是应用程序的管理员或组件可以向特定用户发送特定消息,或向所有用户发送广播通知.

通知将按严重性,类型(中断,新服务等)和相应组件进行分类.

用户可以选择他们感兴趣的类型和组件,以及他们希望如何接收这些通知(通过电子邮件,只显示在仪表板上,短信等).用户可以确认或删除通知,因此他们不会再显示该用户.

虽然我确信从头开始实现这将是有趣的,但感觉应该有一个现有的系统,Apache项目,商业项目等,这样做,并避免我不得不重新发明轮子.

我的问题是:任何人都可以推荐一个可以集成到现有应用程序中并自动处理所有后端内容的通知跟踪框架吗?商业或开源是好的,只要许可条款是商业友好的(请不要使用GPL或LGPL).

java notifications dashboard

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

如何使用MessageDigest,Base64进行解码

我目前正在编码密码.我必须解码密码.这是要编码的代码.我想把原始密码比作一下.我研究过MessageDigest,它说它是一种单向方法.不知道如何获取原始邮件.我们有一个解码方法,但它没有给我原始密码 - Base64.decode.

 public static synchronized String getMD5_Base64(String input) {
        if (!isInited) {
            isInited = true;
            try {
                digest = MessageDigest.getInstance("MD5");
            } catch (Exception ex) {
            }
        }
        if (digest == null)
            return input;

        // now everything is ok, go ahead
        try {
            digest.update(input.getBytes("UTF-8"));
        } catch (java.io.UnsupportedEncodingException ex) {
        }
        byte[] rawData = digest.digest();
        byte[] encoded = Base64.encode(rawData);
        String retValue = new String(encoded);
        return retValue;
    }
}
Run Code Online (Sandbox Code Playgroud)

java hash base64

7
推荐指数
2
解决办法
4万
查看次数

为什么Struts2将我的字符串转换为字符串数组?

我有一个Struts 2(JDK 1.7,Struts 2.2.1)应用程序,它包含一个过滤条件列表,在地图中存储为字符串.

Map< String, String > m_filters = new HashMap< String, String >();

public Map< String, String > getFilters() {
    return m_filters;
}
Run Code Online (Sandbox Code Playgroud)

我传递了一个格式如下的URL:

http://myserver.com/myapp/GenerateReport.action?reportID=Whatever&filters.fromDate=0&filters.toDate=2000000000&filters.FcsType=piv_cardholder_3kp&detailed=true

即使Map具有指定为String的键和值类型,也尝试从中获取值

    Map< String, String > filters = getFilters();
    String value = filters.get( "fromDate" );
Run Code Online (Sandbox Code Playgroud)

导致抛出此异常:

java.lang.ClassCastException: [Ljava.lang.String; cannot be cast to java.lang.String

我在单元测试中重现了这一点,并在调试器中确认Struts 2似乎为每个参数创建了一个String [1]而不是String.即它是一个长度为1的字符串数组,唯一的字符串是期望值(在这种情况下为"0").

我的问题是:这是Struts2中的一个错误,还是我做错了什么?

如果是一个bug,是否有一个已知的解决方法?

java struts2

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

JAXB是否值得为少数小型POJO服务?

我正在实现一个小的RESTful Web服务,并且认为我将返回XML blob来表示资源,这些资源直接映射到我拥有的某些Java类.

我可以为每个类做自定义XML编码器,但我偶然发现了JAXB(我从未使用过),这似乎是一种避免编写繁琐的编码逻辑的简洁方法,如果我添加的话我必须保持同步任何类的新属性.

所以,我的问题是: JAXB对于像这样简单的东西来说太重了吗?是否值得使用将基本结构,bean集合等映射到XML文档?

编辑:我正在使用Jersey来构建服务.

java web-services jaxb

6
推荐指数
2
解决办法
224
查看次数

在TeamCity上,Android无法读取Jacoco数据文件

我今天正在学习TeamCity Integration Server,我正在尝试使用基于Android Gradle的应用程序启用Jococo Reports.

文档向我展示了如何启用Jococo覆盖,并显示以下警告:

确保您的测试以fork = true模式运行.否则,可能无法正确收集覆盖数据.

我不知道该怎么做才能"在fork = true模式下运行我的测试".TeamCity没有生成覆盖率报告,并通过以下日志警告我:

Jacoco数据文件路径指定为C:\ TeamCity\buildAgent\temp\buildTmp\JACOCO5884661263301729570coverage\jacoco.exec但不可读.不会收集保险范围.

我认为这个警告与不在fork = true模式下运行测试有关.

所以,我的问题是:

  1. 什么fork = true模式意味着和
  2. 如何在gradle上启用它

谢谢!!!

teamcity android gradle android-gradle-plugin

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