小编Joh*_*nst的帖子

在Java中解析包含HTML实体的XML文件而不更改XML

我必须解析Java中的一堆XML文件,有时 - 并且无效地 - 包含HTML实体,例如—,>等等.我理解处理这个问题的正确方法是在解析之前向XML文件添加合适的实体声明.但是,我无法做到这一点,因为我无法控制这些XML文件.

是否存在我可以覆盖的某种回调,只要Java XML解析器遇到这样的实体就会调用它?我无法在API中找到一个.

我想用:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

DocumentBuilder parser = dbf.newDocumentBuilder();
Document        doc    = parser.parse( stream );
Run Code Online (Sandbox Code Playgroud)

我发现我可以重写resolveEntityorg.xml.sax.helpers.DefaultHandler,但我要如何使用这与更高级别的API?

这是一个完整的例子:

public class Main {
    public static void main( String [] args ) throws Exception {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder parser = dbf.newDocumentBuilder();
        Document        doc    = parser.parse( new FileInputStream( "test.xml" ));
    }
Run Code Online (Sandbox Code Playgroud)

}

使用test.xml:

<?xml version="1.0" encoding="UTF-8"?>
<foo>
    <bar>Some&nbsp;text &mdash; invalid!</bar>
</foo>
Run Code Online (Sandbox Code Playgroud)

生产:

[Fatal Error] :3:20: The entity …
Run Code Online (Sandbox Code Playgroud)

java xml xml-parsing

18
推荐指数
2
解决办法
8395
查看次数

Java泛型SuppressWarnings("未选中")之谜

为什么代码替代(1)编译时没有警告,代码替代(2)产生"未经检查的强制转换"警告?

两者共同:

class Foo<T> {
    Foo( T [] arg ) {
    }
}
Run Code Online (Sandbox Code Playgroud)

替代方案(1):

class Bar<T> extends Foo<T> {
    protected static final Object [] EMPTY_ARRAY = {};

    @SuppressWarnings("unchecked")
    Bar() {
         super( (T []) EMPTY_ARRAY );
    }
}
Run Code Online (Sandbox Code Playgroud)

替代方案(2):

class Bar<T> extends Foo<T> {
    @SuppressWarnings("unchecked")
    Bar() {
         super( (T []) EMPTY_ARRAY );
    }

    protected static final Object [] EMPTY_ARRAY = {};
}
Run Code Online (Sandbox Code Playgroud)

备选方案(2)产生:

javac -Xlint:unchecked Foo.java Bar.java 
Bar.java:4: warning: [unchecked] unchecked cast
             super( (T []) EMPTY_ARRAY );
                           ^
  required: T[]
  found: …
Run Code Online (Sandbox Code Playgroud)

java generics unchecked suppress-warnings java-7

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

使用Java8的SNI客户端之谜

我有一个Apache Web服务器,它运行几个具有不同证书和SNI的TLS虚拟主机.

我可以使用curl访问各种虚拟主机(假设SNI使其工作).我也可以使用一个基本上只是在URL上的openConnection()的命令行Java程序来访问它们.

在我的Tomcat应用程序中,基本相同的客户端代码访问与客户端相同的Apache服务器,但始终以默认证书(defaulthost.defaultdomain)结束,而不是在URL中指定的虚拟主机的证书尝试访问.(这会产生SunCertPathBuilderException - 基本上它无法验证证书的证书路径,当然这是真的,因为它是非官方证书.但是,无论如何都不应该使用默认证书.)

就像我的应用程序/ Tomcat中的SNI已在客户端停用一样.我不知道为什么我的应用程序和命令行之间应该有不同的行为; 相同的JDK,相同的主机等

我找到了属性jsse.enableSNIExtension,但我确认两种情况都设置为true.问题:

  1. 任何想法,甚至是狂野的想法,为什么这两个程序的行为不同?

  2. 有什么想法我会如何调试这个?

这是Arch Linux on 86_64,JDK 8u77,Tomcat 8.0.32.

java ssl sni

11
推荐指数
2
解决办法
9472
查看次数

在OSX Lion升级后,"Makefile"所需的perl".../config.h"无效

解决了.见底部.

刚刚升级到OSX Lion并试图让我的Perl安装再次运行:

sudo /usr/bin/perl -MCPAN -e 'install "MODULENAME"'

MODULENAME我试过的任何价值(例如JSON)产生:

...
Checking if your kit is complete...
Looks good
Writing Makefile for JSON
make: *** No rule to make target `/System/Library/Perl/5.12/darwin-thread-multi-2level/CORE/config.h', needed by `Makefile'.  Stop.
  MAKAMAKA/JSON-2.53.tar.gz
  /Developer/usr/bin/make -- NOT OK
Run Code Online (Sandbox Code Playgroud)

我找不到任何类似的东西config.h,目录虽然存在...

甚至没有这个工作:

/usr/bin/cpan CPAN
Run Code Online (Sandbox Code Playgroud)

已解决:从AppStore下载并安装最新版本的XCode.请注意,只是从AppStore下载XCode不会安装它(为什么,Apple,为什么?)但是只将安装程序转储到/ Applications中.运行安装程序,这将解决此问题.

macos perl cpan osx-lion

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

JDK9中是否有动态模块发现?

在即将发布的Java 9中,有没有办法动态发现哪些模块可用?

例如:

  1. 用一些模块路径运行一些应用程序
  2. 在应用程序运行时,将更多模块添加到模块路径中(例如,复制到模块目录中)
  3. 在应用程序内,查询"给我所有可用模块"(可能带有过滤器,例如那些提供相同服务的替代实现的过滤器)

我不能从文档中说出来.

java java-platform-module-system java-9

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

显示 Hugo 中最新的 3 篇博客文章(但不包括其他页面)

我在 Hugo 中有一个包含一堆静态页面和一个博客的网站。

在首页上,我想创建指向最近三篇博客文章的短链接(但不是任何可能最近修改的静态页面)。博客文章都在目录中blog/

我无法弄清楚这个的语法。到目前为止,我有:

{{- range (.Paginate ( first 3 .Pages.ByDate )).Pages }}
    <li><a href="{{ .Permalink }}">{{ .Title }}</a></li>
{{- end}}
Run Code Online (Sandbox Code Playgroud)

但我还需要按目录过滤blog/。这是我的layouts/index.html模板中的。

hugo

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

具有SNI的Apache HTTPS反向代理,代理上没有密钥

example1.com和example2.com解析为host0.host0运行带有两个VirtualHost的Apache反向代理.它将example1.com的请求委托给host1,将example2.com的请求委托给host2.

在所有地方使用http,显然可以使用.

使用https,我可以将example1.com和example2.com的密钥粘贴在host0上,然后让host0与host1和host2对话http或https.鉴于SNI,这也应该有效.

我的问题:如果没有host0.com上的example1.com或example2.com密钥,它可以工作吗?我想避免host0能够执行中间人攻击.

如果我正确理解SNI,则仅在客户端将所需的虚拟主机传送到host0之后才交换密钥材料.这应该是(?)足够的信息,以便Apache基本上转发到host1或host2的连接,而根本不查看传输的内容.这根本不需要关键材料.

apache ssl proxy virtual-hosts sni

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

Postgresql 中用户权限的最佳实践?

我是 postgres 新手,我正在尝试找出在运行 Web 应用程序时如何最好地保护我的数据库。

在 MySQL 中,我倾向于使用管理用户来执行诸如创建数据库、创建表、修改架构、删除表等操作:用于某些应用程序持续使用数据库时不应该发生的所有活动。然后,我有第二个用户(每个应用程序一个),该用户(仅)拥有应用程序所需的权限,例如插入、更新等。这可以避免应用程序错误/黑客造成灾难性后果。

现在我想弄清楚如何在 postgres 中做类似的事情。与 MySQL 不同,postgres 数据库似乎有一个“所有者”。如果我使用上面的方案,管理用户是否应该“拥有”所有应用程序的所有数据库?或者这里有哪些最佳实践?

另外:我只是发现授予“所有表”权限似乎意味着“当前定义的所有表”并且不包括将来的表。与 MySQL 不同,“on foo.*”表示所有当前和未来的表。那是对的吗?有没有办法在授予语句中包含未来的表,或者我每次都重新执行?

mysql database postgresql

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

保险丝2和保险丝3到底有什么区别?

FUSE = 用户空间中的文件系统建议发行版同时打包一个 fuse2 和一个 fuse3(请参阅此处),并且确实如此。

这究竟是什么原因?是不是fuse3中的init代码不一样?

linux fuse

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

OSX 上类似 udev 的东西是什么?它是如何工作的?

如果我将 USB 串行适配器插入 Mac,/dev 中会显示一个新设备,例如 /dev/tty.usbmodem1421 或 /dev/tty.usbserial-A7048O1O。

如果这是 Linux,我会寻找一个 udev 规则来解释设备名称的来源以及创建它的原因。

但这是OSX。Mac 上的设备名称是如何分配的(例如,为什么设备名称中有那些有趣的数字),以及哪一段代码是这样做的?

macos kernel serial-port device-driver udev

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