最近发布了一个关于HttpClient过度Https 的问题(在这里找到).我已经取得了一些进展,但我遇到了新的问题.和我的上一个问题一样,我似乎无法找到适合我的任何地方的例子.基本上,我希望我的客户端接受任何证书(因为我只指向一个服务器),但我一直在接受javax.net.ssl.SSLException: Not trusted server certificate exception.
所以这就是我所拥有的:
public void connect() throws A_WHOLE_BUNCH_OF_EXCEPTIONS {
HttpPost post = new HttpPost(new URI(PROD_URL));
post.setEntity(new StringEntity(BODY));
KeyStore trusted = KeyStore.getInstance("BKS");
trusted.load(null, "".toCharArray());
SSLSocketFactory sslf = new SSLSocketFactory(trusted);
sslf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(new Scheme ("https", sslf, 443));
SingleClientConnManager cm = new SingleClientConnManager(post.getParams(),
schemeRegistry);
HttpClient client = new DefaultHttpClient(cm, post.getParams());
HttpResponse result = client.execute(post);
}
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
W/System.err( 901): javax.net.ssl.SSLException: Not trusted server certificate
W/System.err( 901): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:360)
W/System.err( 901): …Run Code Online (Sandbox Code Playgroud) 我正在尝试将调试器连接到在Open JDK 11上运行的Wildlfy。
尽管Wildfly说:
Listening for transport dt_socket at address: 8787
我的IDE(IntelliJ IDEA CE 2018.1)声称没有任何连接:
Unable to open debugger port (localhost:8787): java.io.IOException "handshake failed - connection prematurally closed"。
我通过standalone.sh --debug以下方式启动Wildfly JAVA_OPTS:
-server
-Xms64m
-Xmx512m
-XX:MetaspaceSize=96M
-XX:MaxMetaspaceSize=256m
-Djava.net.preferIPv4Stack=true
-Djboss.modules.system.pkgs=org.jboss.byteman
-Djava.awt.headless=true
-agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n
--add-exports=java.base/sun.nio.ch=ALL-UNNAMED
--add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED
--add-exports=jdk.unsupported/sun.reflect=ALL-UNNAMED
--add-modules=java.se
Run Code Online (Sandbox Code Playgroud)
Java 9/10/11有什么变化吗?使用Oracle JDK 8时,使用完全相同的设置进行远程调试可以很好地工作。
我可以使用telnet确认该端口8787确实无法访问。
阅读@ehsavoie的评论后进行更新:netstat -ln在运行Wildfly的服务器上显示:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:8787 0.0.0.0:* LISTEN
Run Code Online (Sandbox Code Playgroud)
因此,显然在OpenJDK 11中,默认情况下,调试端口现已绑定到localhost。
这对我在 Java 8 下构建来说效果很好。现在在 Java 17.01 下,当我执行 mvn 部署时,我得到了这个。
mvn install 工作正常。我尝试了 3.6.3 和 3.8.4 并将(我认为)我的所有插件更新到最新版本。
有任何想法吗?
[ERROR] Failed to execute goal org.sonatype.plugins:nexus-staging-maven-plugin:1.6.8:deploy (injected-nexus-deploy) on project persism: Execution injected-nexus-deploy of goal org.sonatype.plugins:nexus-staging-maven-plugin:1.6.8:de
ploy failed: An API incompatibility was encountered while executing org.sonatype.plugins:nexus-staging-maven-plugin:1.6.8:deploy: java.lang.ExceptionInInitializerError: null
[ERROR] import: Entry[import from realm ClassRealm[maven.api, parent: null]]
[ERROR]
[ERROR] -----------------------------------------------------
[ERROR] : Unable to make field private final java.util.Comparator java.util.TreeMap.comparator accessible: module java.base does not "opens java.util" to unnamed module @149f5761
[ERROR] -> [Help 1] …Run Code Online (Sandbox Code Playgroud) JavaFX 本身有一些 DI 方法来允许在 XML 描述的 UI 和控制器之间进行绑定:
<Pane fx:controller="foo.bar.MyController">
<children>
<Label fx:id="myLabel" furtherAttribute="..." />
</children>
</Pane>
Run Code Online (Sandbox Code Playgroud)
Java 端看起来像这样:
public class MyController implements Initializable {
@FXML private Label myLabel;
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
// FXML-fields have been injected at this point of time:
myLabel.setText("Hello world!");
}
}
Run Code Online (Sandbox Code Playgroud)
为此,我不能只创建 MyController 的实例。相反,我必须要求 JavaFX 为我做一些事情:
FXMLLoader loader = new FXMLLoader(MyApp.class.getResource("/fxml/myFxmlFile.fxml"), rb);
loader.load();
MyController ctrl = (MyController) loader.getController();
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好
但是,如果我想使用 Dagger 2 将一些非 FXML 依赖项注入到这个控制器类的构造函数中,我有一个问题,因为我无法控制实例化过程,如果我使用 JavaFX。
public class MyController implements …Run Code Online (Sandbox Code Playgroud) class TestExceptions {
public static void main(String[] args) throws Exception {
try {
System.out.println("try");
throw new Exception();
} catch(Exception e) {
System.out.println("catch");
throw new RuntimeException();
} finally {
System.out.println("finally");
}
}
}
Run Code Online (Sandbox Code Playgroud)
以下是我尝试多次在eclipse中运行代码时的输出.我相信到目前为止,无论何时执行try/catch块的代码的最后一行(可以返回或抛出新的Exception()类型的stmt),最后都会执行块,但这里的输出不同每次?任何人都可以澄清我的假设是对还是错?
try
catch
Exception in thread "main" finally
java.lang.RuntimeException
at TestExceptions.main(TestExceptions.java:9)
Exception in thread "main" try
catch
java.lang.RuntimeException
at TestExceptions.main(TestExceptions.java:9)
finally
Run Code Online (Sandbox Code Playgroud) 我知道Files.list(路径)使用Files.newDirectoryStream(路径)内部,基本上只是包装的DirectoryStream.
但是,当我想使用第一个或后一个时,我不明白.
如果我想使用流API,这只是一种方便的方法吗?我自己可以做到这一点相当容易,看到这个问题.
如果查看实现Files.list,则包含内部DirectoryStream抛出的异常UncheckedIOException.我应该知道的任何事情吗?
据我所知,从其他SO问题的答案,我不需要释放固定长度的数组,如下所示:
unsigned char buffer[16];
Run Code Online (Sandbox Code Playgroud)
但一般来说,每当打电话时都必须释放内存malloc,的memcpy等
我的问题是:我需要free在以下场景中打电话:
unsigned char buffer[16];
memcpy(buffer, source, 16);
...
free(buffer); // needed?
Run Code Online (Sandbox Code Playgroud)
更确切地说:根据变量的声明或初始化,决定是使用堆还是堆栈?
我有一个非常基本的JavaFX应用程序,如果Application类不是 Main类,它可以完美地工作:
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
public class Main {
public static void main(String[] args) {
Application.launch(App.class, args);
}
}
public class App extends Application {
@Override
public void start(Stage primaryStage) {
FXMLLoader loader = new FXMLLoader(); // works
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我将两者合并在一起时(这是大多数教程中推荐的方式,包括OpenJFX的官方文档),模块系统抛出IllegalAccessError(至少在OpenJDK 11.0.2上):
public class MainApp extends Application {
@Override
public void start(Stage primaryStage) {
FXMLLoader loader = new FXMLLoader(); // throws IllegalAccessError
}
public static void main(String[] args) {
launch(MainApp.class, args);
} …Run Code Online (Sandbox Code Playgroud) 我正在写一个自制的公式,安装一个替代的clang版本.正如我想要的那样,clang我的PATH中的原始,系统提供和修改过的clang,我想将修改后的一个重命名为clang-omp.
一种尝试是在公式的安装部分中执行此操作.可悲的是没有成功.
def install
#...
system "./configure", "--prefix=#{prefix}"
system "make", "install"
# The following isn't working:
(bin/'clang').mv 'clang-omp'
(bin/'clang++').mv 'clang++-omp'
end
Run Code Online (Sandbox Code Playgroud)
另一个想法是将公式标记为keg-only,并在更改名称时手动创建二进制文件.
另一种方法(可能是最好的)可能是配置在其中创建的符号链接/usr/local/bin/*.但我找不到有关符号链接创建步骤的任何信息.
我正在尝试使用 BouncyCastle 的 CMac 实现,但显然我做错了。至少以下单元测试(基于 RFC 5297 测试向量)失败:
@Test
public void testCMacOfZeros() {
byte[] key = {(byte) 0xff, (byte) 0xfe, (byte) 0xfd, (byte) 0xfc, //
(byte) 0xfb, (byte) 0xfa, (byte) 0xf9, (byte) 0xf8, //
(byte) 0xf7, (byte) 0xf6, (byte) 0xf5, (byte) 0xf4, //
(byte) 0xf3, (byte) 0xf2, (byte) 0xf1, (byte) 0xf0, //
(byte) 0xf0, (byte) 0xf1, (byte) 0xf2, (byte) 0xf3, //
(byte) 0xf4, (byte) 0xf5, (byte) 0xf6, (byte) 0xf7, //
(byte) 0xf8, (byte) 0xf9, (byte) 0xfa, (byte) 0xfb, //
(byte) …Run Code Online (Sandbox Code Playgroud) java ×8
java-11 ×2
javafx ×2
aes ×1
bouncycastle ×1
c ×1
certificate ×1
cmac ×1
dagger-2 ×1
debugging ×1
exception ×1
free ×1
homebrew ×1
https ×1
java-17 ×1
java-8 ×1
java-platform-module-system ×1
java-stream ×1
javafx-11 ×1
malloc ×1
maven ×1
memory-leaks ×1
nio ×1
siv-authenticated-encryption ×1
ssl ×1
wildfly ×1