小编sou*_*frk的帖子

SSL握手警报:自升级到Java 1.7.0以来unrecognized_name错误

我今天从Java 1.6升级到Java 1.7.从那时起,当我尝试通过SSL建立与Web服务器的连接时发生错误:

javax.net.ssl.SSLProtocolException: handshake alert:  unrecognized_name
    at sun.security.ssl.ClientHandshaker.handshakeAlert(ClientHandshaker.java:1288)
    at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1904)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1027)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1262)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1289)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1273)
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:523)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1296)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
    at java.net.URL.openStream(URL.java:1035)
Run Code Online (Sandbox Code Playgroud)

这是代码:

SAXBuilder builder = new SAXBuilder();
Document document = null;

try {
    url = new URL(https://some url);
    document = (Document) builder.build(url.openStream());
} catch (NoSuchAlgorithmException ex) {
    Logger.getLogger(DownloadLoadiciousComputer.class.getName()).log(Level.SEVERE, null, ex);  
}
Run Code Online (Sandbox Code Playgroud)

它只是一个测试项目,这就是为什么我允许和使用不受信任的证书与代码:

TrustManager[] trustAllCerts = new TrustManager[]{
    new X509TrustManager() {

        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return null;
        }

        public void checkClientTrusted(
                java.security.cert.X509Certificate[] certs, …
Run Code Online (Sandbox Code Playgroud)

java ssl

222
推荐指数
9
解决办法
29万
查看次数

在Java中解析JSON字符串

我试图在java中解析一个JSON字符串,以单独打印单个值.但是在程序运行的同时我得到以下错误 -

Exception in thread "main" java.lang.RuntimeException: Stub!
       at org.json.JSONObject.<init>(JSONObject.java:7)
       at ShowActivity.main(ShowActivity.java:29)
Run Code Online (Sandbox Code Playgroud)

我的班级看起来像 -

import org.json.JSONException;
import org.json.JSONObject;

public class ShowActivity {
   private final static String  jString = "{" 
   + "    \"geodata\": [" 
   + "        {" 
   + "                \"id\": \"1\"," 
   + "                \"name\": \"Julie Sherman\","                  
   + "                \"gender\" : \"female\"," 
   + "                \"latitude\" : \"37.33774833333334\"," 
   + "                \"longitude\" : \"-121.88670166666667\""            
   + "                }" 
   + "        }," 
   + "        {" 
   + "                \"id\": \"2\"," 
   + "                \"name\": \"Johnny Depp\","          
   + " …
Run Code Online (Sandbox Code Playgroud)

java parsing json

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

为什么我们需要复制构造函数以及何时应该在java中使用复制构造函数

我正在浏览Copy Constructors,我已经浏览了堆栈中的链接和其他链接.但我不清楚以下几点.

  1. 为什么我们需要一个Copy Constructor
  2. 我们何时需要复制构造函数

我的意思是我们需要使用Copy Constructor的确切情况或场景是什么.有人可以用一个例子解释或指出链接,这样我就可以明确地理解它们.

以下是我为了解什么是复制构造函数而经历的链接.

http://www.programmerinterview.com/index.php/java-questions/how-copy-constructors-work/

https://deepeshdarshan.wordpress.com/2013/12/05/copy-constructors-in-java/

第二个链接解释了"为什么"和"在哪里"使用复制构造函数.但我仍然不清楚它.

下面是我的Employee.java类

package com.test;

/**
 * @author avinashd
 *
 */
public class Employee {

    private String rollNo;
    private String name;

    //constructor
    public Employee(String rollNo, String name){

        this.rollNo = rollNo;
        this.name = name;
    }

    //copy constructor
    public Employee(Employee employee){

    this.rollNo = employee.rollNo;
    this.name = employee.name;

    }

    public String getRollNo() {
        return rollNo;
    }

    public void setRollNo(String rollNo) {
        this.rollNo = rollNo;
    }

    public String getName() {
        return name;
    }

    public void …
Run Code Online (Sandbox Code Playgroud)

java copy-constructor

34
推荐指数
3
解决办法
4万
查看次数

Spring jUnit测试属性文件

我有一个jUnit测试,它有自己的属性文件(application-test.properties)和它的spring配置文件(application-core-test.xml).

其中一种方法使用spring config实例化的对象,它是一个spring组件.类中的一个成员从application.properties派生它的值,application.properties是我们的主要属性文件.通过jUnit访问此值时,它始终为null.我甚至尝试更改属性文件以指向实际的属性文件,但这似乎不起作用.

这是我访问属性文件对象的方式

@Component
@PropertySource("classpath:application.properties")
public abstract class A {

    @Value("${test.value}")
    public String value;

    public A(){
        SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
    }

    public A(String text) {
        this();
        // do something with text and value.. here is where I run into NPE
    }

}

public class B extends A { 
     //addtnl code

    private B() {

    }


    private B(String text) {
         super(text)
    }
}

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:META-INF/spring/application-core-test.xml",
                             "classpath:META-INF/spring/application-schedule-test.xml"})
@PropertySource("classpath:application-test.properties")
public class TestD {

    @Value("${value.works}")
    public String valueWorks;

    @Test
    public void testBlah() {     
        SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
        B b= new …
Run Code Online (Sandbox Code Playgroud)

java junit spring spring-junit

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

Files.exists(path)和path.toFile().exists()为同一文件提供不同的结果

我得到不同的结果为Files.exists(path),以path.toFile().exists()在Windows本地文件.我可以在Windows资源管理器中看到这个文件,虽然我有(随机)修改过的权限,也许权限没有意义.

但是,这并不能解释为什么旧方法返回true并且新方法返回false.该文件确定存在但可能对运行Java代码的用户不可见,因此我不确定应该是什么样的正确答案.我也无法看到如何查看哪个用户正在运行代码,计算机上只有一个真正的用户Paul,但我想知道是否以管理员身份运行或不影响事情.

System.out.println("Path Exists(1):"+Files.exists(path));
System.out.println("Path Exist(2) :"+path.toFile().exists());
Run Code Online (Sandbox Code Playgroud)

给

Path Exists(1):false
Path Exist(2) :true
Run Code Online (Sandbox Code Playgroud)

也

System.out.println("Path readable(3) :"+Files.isReadable(path));
System.out.println("Path readable(4):"+path.toFile().canRead());
Run Code Online (Sandbox Code Playgroud)

以同样的方式给予

Path readable(3) :false
Path readable(4):true
Run Code Online (Sandbox Code Playgroud)

权限输出

File C:\Code\jthink\opensrc\jaudiotagger\testdata\test157.dsf permissions
owner:PCLAPTOP\Paul
NT AUTHORITY\SYSTEM:READ_DATA/WRITE_DATA/APPEND_DATA/READ_NAMED_ATTRS/WRITE_NAMED_ATTRS/EXECUTE/DELETE_CHILD/READ_ATTRIBUTES/WRITE_ATTRIBUTES/DELETE/READ_ACL/WRITE_ACL/WRITE_OWNER/SYNCHRONIZE:DENY
BUILTIN\Administrators:READ_DATA/WRITE_DATA/APPEND_DATA/READ_NAMED_ATTRS/WRITE_NAMED_ATTRS/EXECUTE/DELETE_CHILD/READ_ATTRIBUTES/WRITE_ATTRIBUTES/DELETE/READ_ACL/WRITE_ACL/WRITE_OWNER/SYNCHRONIZE:DENY
BUILTIN\Administrators:READ_DATA/WRITE_DATA/APPEND_DATA/READ_NAMED_ATTRS/WRITE_NAMED_ATTRS/EXECUTE/DELETE_CHILD/READ_ATTRIBUTES/WRITE_ATTRIBUTES/DELETE/READ_ACL/WRITE_ACL/WRITE_OWNER/SYNCHRONIZE:ALLOW
NT AUTHORITY\SYSTEM:READ_DATA/WRITE_DATA/APPEND_DATA/READ_NAMED_ATTRS/WRITE_NAMED_ATTRS/EXECUTE/DELETE_CHILD/READ_ATTRIBUTES/WRITE_ATTRIBUTES/DELETE/READ_ACL/WRITE_ACL/WRITE_OWNER/SYNCHRONIZE:ALLOW
BUILTIN\Users:READ_DATA/READ_NAMED_ATTRS/EXECUTE/READ_ATTRIBUTES/READ_ACL/SYNCHRONIZE:ALLOW
NT AUTHORITY\Authenticated Users:READ_DATA/WRITE_DATA/APPEND_DATA/READ_NAMED_ATTRS/WRITE_NAMED_ATTRS/EXECUTE/READ_ATTRIBUTES/WRITE_ATTRIBUTES/DELETE/READ_ACL/SYNCHRONIZE:ALLOW


c:\Code\jthink\opensrc\jaudiotagger>attrib C:\Code\jthink\opensrc\jaudiotagger\testdata\test157.dsf
A    R       C:\Code\jthink\opensrc\jaudiotagger\testdata\test157.dsf
Run Code Online (Sandbox Code Playgroud)

更新 我没有得出结论,但认为这些信息可能有用.

我在IntelliJ IDE中运行代码而没有启用IDE Run选项的IDE Run程序,启用此功能后,Java应用程序也获得了管理员权限.

感兴趣的是另一个文件我没有添加任何DENY权限,我只是禁用了继承权限并从所有组中删除了READ权限.然后,当我作为用户运行而没有运行管理员启用它无法读取文件,此代码也无法输出任何信息

AclFileAttributeView view = Files.getFileAttributeView(path, AclFileAttributeView.class);
if (view != null)
{
    sb.append("Owner:"+view.getOwner().getName()+"**");
    for (AclEntry acl : view.getAcl())
    {
        sb.append(acl.principal()+"**");
        for(AclEntryPermission aep:acl.permissions()) …
Run Code Online (Sandbox Code Playgroud)

java security nio

13
推荐指数
1
解决办法
4829
查看次数

在Java中实现最佳匹配搜索

我正在尝试使用现有Java数据结构获得最佳匹配字符串匹配.但这很慢,任何改善其表现的建议都会受到欢迎.

Sample数据看起来像这样

Key | V
--------------------- 
0060175559138 | VIP
--------------
006017555     | National
--------------
006017        | Local
---------------
0060          | X
--------------
Run Code Online (Sandbox Code Playgroud)

所以关键= 0060175552020的最佳匹配搜索将返回006017555

我能想到的一种方法是使用散列将多个TreeMaps转移到不同的地图中,从而使搜索区域更小.

private final TreeMap<String, V> index;

public Set<V> syncBestMatch(String key) {              
    Entry<String,V> entry = index.headMap(key, true)
                .descendingMap().entrySet().stream()
                .filter(e -> isPartiallyOrFullyMatching(key, e.getKey()))
                .findFirst()
                .orElseThrow(() -> new NoMatchException("No match found"));

    Set<V> results = new HashSet<>();
    results.add(entry.getValue());
    return results;
}
Run Code Online (Sandbox Code Playgroud)

java collections

11
推荐指数
1
解决办法
1026
查看次数

为什么访问volatile变量比成员慢约100?

在这里,我写了一个关于local,member,volatile成员的访问速度的测试:

public class VolatileTest {

public int member = -100;

public volatile int volatileMember = -100;

public static void main(String[] args) {
    int testloop = 10;
    for (int i = 1; i <= testloop; i++) {
        System.out.println("Round:" + i);
        VolatileTest vt = new VolatileTest();
        vt.runTest();
        System.out.println();
    }
}

public void runTest() {
    int local = -100;

    int loop = 1;
    int loop2 = Integer.MAX_VALUE;
    long startTime;

    startTime = System.currentTimeMillis();
    for (int i = 0; i < loop; i++) {
        for …
Run Code Online (Sandbox Code Playgroud)

java performance volatile

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

Jolt 条件规范

我想要一个条件转换,如果输入中特定字段的值与我的条件匹配,我需要在输出中添加一个属性。下面是我需要的输入和输出。


输入

{
    "attr": [
        {
            "name": "first",
            "validations": [
                {
                    "type": "Required",
                    "value": true
                }
            ]
        },
        {
            "name": "last",
            "validations": [
                {
                    "type": "lenght",
                    "value": "10"
                }
            ]
        },
        {
            "name": "email",
            "validations": [
                {
                    "type": "min",
                    "value": 10
                }
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

输出

{
    "attr": [
        {
            "name": "first",
            "validations": [
                {
                    "type": "Required",
                    "value": true
                }
            ]
        },
        {
            "name": "last",
            "validations": [
                {
                    "type": "lenght",
                    "value": "10"
                }
            ]
        },
        {
            "name": "email",
            "validations": …
Run Code Online (Sandbox Code Playgroud)

java json jolt

6
推荐指数
1
解决办法
7241
查看次数

使用JeMalloc在Java应用程序中查找本机内存泄漏

目前我正在尝试解决Java内存问题:我的Java应用程序不断使用越来越多的内存,最终它被Linux OOM杀手杀死.

可能存在Native Memory泄漏,因为在使用VisualVM检查JVM后,metaspace和堆看起来都很正常.

使用top命令,我可以看到JVM使用的内存不断增加.

本文的第一个图形:

示例#1

与我在自己的应用程序中看到的完美匹配.

所以我尝试使用JeMalloc来查找各种文章中描述的泄漏.在这里我遇到了一个问题:在jeprof本身使用jeprof命令和更高版本的top命令时,它确实显示了使用最多内存的函数,但它们都是十六进制地址,因此我必须缺少一些符号.但我不知道我需要哪些包,这是我不知道的.

我已经找到了这个链接: 链接#1

并安装了这个包:debuginfo-install java-1.8.0-openjdk

我试图先完成简单的步骤:

让JeMalloc使用简单的应用程序,例如w.接下来让它与java -version一起使用.到目前为止,我还可以从JeMalloc获得完美概述的PDF文件.

接下来让它与java -jar一起工作simpletest.jar <<这里我缺少符号例如,如果我不在这里关闭GZipInputStream,那么它不会出现在JeMalloc结果中.

接下来让它使用java -jar myapplication.jar <<这里我也缺少符号.

所以我的问题基本上是:为了让JeMalloc显示所有符号名称以调试应用程序,我需要哪些软件包,例如:

public void test1() {
    InputStream fileInputStream = null;
    GZipInputStream gzipInputStream = null;

    try {
      fileInputStream = new FileInputStream("test.zip");
      gzipInputStream = new GZIPInputStream(fileInputStream);

      int data = gzipInputStream.read();
      while (data != -1) {
        // do something with data
        data = gzipInputStream.read();
      }

    } catch (Exception ex) {

    } finally {
      // Disabled to see whether JeMalloc can detect …
Run Code Online (Sandbox Code Playgroud)

java linux centos7 jemalloc

6
推荐指数
1
解决办法
1480
查看次数

具有不同哈希值的键是否也会映射到 HashMap 中的相同索引?

查看代码,特别是第 393 行,看起来不同的哈希值已映射到相同的索引。我了解到哈希码用于确定要使用 HashMap 中的哪个存储桶,并且存储桶由具有相同哈希码的所有条目的链表组成。他们为什么要e.hash == hash支票?



    public V put(K key, V value) {
        if (key == null)
            return putForNullKey(value);
        int hash = hash(key.hashCode());
        int i = indexFor(hash, table.length);
        for (Entry e = table[i]; e != null; e = e.next) {
            Object k;
            if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
                V oldValue = e.value;
                e.value = value;
                e.recordAccess(this);
                return oldValue;
            }
        }
        modCount++;
        addEntry(hash, key, value, i);
        return null;
    }

Run Code Online (Sandbox Code Playgroud)

java hashmap collision

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