我一直在本地重新创建此示例:https://github.com/spring-projects/spring-integration-samples/tree/master/basic/sftp
但这次只使用注释而不是xml配置。我有这样的东西:
@Configuration
public class SftpExampleBeanClasses extends SftpConfig {
@Bean
public CachingSessionFactory<LsEntry> sftpSessionFactory() throws IOException {
DefaultSftpSessionFactory sftpSessionFactory = new DefaultSftpSessionFactory();
sftpSessionFactory.setHost(this.host);
sftpSessionFactory.setPort(this.port);
sftpSessionFactory.setUser(this.username);
InputStream stream = new ClassPathResource(this.privatekey).getInputStream();
sftpSessionFactory.setPrivateKey(new ByteArrayResource(StreamUtils.copyToByteArray(stream)));
sftpSessionFactory.setPrivateKeyPassphrase(this.passphrase);
sftpSessionFactory.setAllowUnknownKeys(true);
return new CachingSessionFactory<LsEntry>(sftpSessionFactory);
//return sftpSessionFactory;
}
@SuppressWarnings({ "unchecked", "rawtypes" })
@Bean
@ServiceActivator(inputChannel = "ftpChannel", adviceChain = "retryAdvice")
public MessageHandler ftpHandler() throws IOException {
FileTransferringMessageHandler handler = new FileTransferringMessageHandler(this.sftpSessionFactory());
handler.setRemoteDirectoryExpression(new LiteralExpression("/"));
return handler;
}
}
SftpCommon类:
@Configuration
public class SftpCommon extends SftpConfig {
@Bean
public int serverPort(){
if(this.port == -1){
return EmbeddedSftpServer.PORT;
}
return this.port;
}
@Bean
public EmbeddedSftpServer embeddedSftpServer(){
EmbeddedSftpServer embeddedSftpServer = new EmbeddedSftpServer();
embeddedSftpServer.setPort(serverPort());
return embeddedSftpServer;
}
}
SftpConfig类别:
@Configuration
@PropertySource(value="classpath:user.properties")
public class SftpConfig {
@Value("${port}")
protected
int port;
@Value("${username}")
protected
String username;
@Value("${passphrase}")
protected
String passphrase;
@Value("${host}")
protected
String host;
@Value("${private.keyfile}")
protected
String privatekey;
public String getHost() {
return host;
}
@Bean
public String getUsername() {
return this.username;
}
@Bean
public String getPassphrase() {
return this.passphrase;
}
@Bean
public static PropertySourcesPlaceholderConfigurer placeHolderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
@Bean
public String getPrivatekey() {
return privatekey;
}
}
在我的测试中,我有这样的东西:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes ={SftpExampleBeanClasses.class,SftpCommon.class, SftpConfig.class})
public class SftpOutboundTransferSample {
@Autowired
ApplicationContext applicationContext;
@Test
public void testOutbound() throws Exception{
final String sourceFileName = "README.md";
final String destinationFileName = sourceFileName +"_foo";
@SuppressWarnings("unchecked")
SessionFactory<LsEntry> sessionFactory = (SessionFactory<LsEntry>)
applicationContext.getBean(CachingSessionFactory.class);
/* this is the line where I'm getting issues */
sessionFactory.getSession();
}
我的stackTrace是:
org.springframework.messaging.MessagingException:未能获取池化项目;嵌套异常ethod.java:606IllegalStateException:未能在org.junit.runners.model.SimpleP1.run项目(SimplePethod.java:50)org.junit.internal.runners.model.CachingSessionFallable.run会话(CachingSessionFallable.java:12)org.junit.runners.model.SftpOut边界TransferSethod.invoke出站(SftpOut边界TransferSethod.java:47)在org.junit.internal.runners.statements.NativeMethod odAccessorIethod.evaluate0(本机方法)在sun.reflect.NativeMethod odAccessorImpl.invoke(NativeMethod odAccessorImpl.java:57)在sun.reflect.在Mjava.lang.reflect.(Mjava.lang.)在org.springframework.integration.util.FrameworkMethod$ool.getReflectiveCall(FrameworkMool.java:178)在org.springframework.integration.file.remote.session.ReflectiveCactory.get(ReflectiveCactory.java:123)在com.spring.example.sftp.FrameworkMample.test(FrameworkMample.java:62)在sun.reflect.InvokeMmpl.invoke(InvokeMethod. java: 17)在org. springframe. test. conttext.家长跑步者1美元.时间表(家长跑步者. java: 71)在org. jite. runners。家长跑步者. runUNICEF(家长跑步者. java: 288)在org. jite. runners。家长跑步者.访问0美元(家长跑步者. java: 58)在org. jite. runners。家长跑步者2美元.评估(家长跑步者. java: 268)在org. springframe. test. cont. Junit4. statement。RunBeforeTestClassCallback.评估(RunBeforeTestClassCallback. java: 61)在org. springframe. test. cont. Junit4. statement。RunAfterTestClassCallbacks.评估(RunAfterTestClassCallbacks. java: 70)在org. jite. runners。家长跑步者. run(家长跑步者. java: 363)在org. springframe. test. cont. Junit4。SprSimplePool. getItem(SimplePool. java: 169)...31更多原因由:java. lang。IllegalStateException:在org. springframe.集成. sftp. sesion连接失败。在org. springframe.集成. sftp. sesion的Sftpsesion. connect(SftpSession. java: 273)。DefaultSftpSessionFactory. get会话(DefaultSftpSessionFactory. java: 388)...36更多原因由:com. jcraft. jsch。JSchException:在com. jcraft. jsch的数据包损坏Ma。会话。start_discard(会话. java: 1067)在com. jcraft. jsch。会话. read(会话. java: 937)在com. jcraft. jsch。会话.连接(会话. java: 309)在com. jcraft. jsch。会话.连接
我在互联网上被搜索过,但老实说,我不理解为什么会出现这种例外:
com.jcraft.jsch.JSchException:数据包损坏
我的log4j。xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- Appenders -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{HH:mm:ss.SSS} %-5p [%t][%c] %m%n" />
</layout>
</appender>
<!-- Loggers -->
<logger name="org.springframework.integration">
<level value="warn" />
</logger>
<logger name="org.springframework.integration.samples">
<level value="info" />
</logger>
<logger name="log4j.category.com.jcraft.jsch">
<level value="debug" />
<appender-ref ref="console" />
</logger>
<!-- Root Logger -->
<root>
<priority value="debug" />
<appender-ref ref="console" />
</root>
</log4j:configuration>
[更新]完整ECLIPSE的输出(控制台)如下:https://gist.github.com/columb1a/fe2d4dccabb6a5d9cecd3225d2a591dc
我解决了我的问题:
在我的*. Properties文件中,服务器的端口号为-1。然后服务器尝试启动,如果它能够找到-1以外的端口(随机端口),则它会自动启动。然后我必须在我的SFTP会话中注入该随机端口号。关键是,我在我的sftp会话中使用了“-1”值(在我的*. Properties文件中声明),而不是使用服务器生成的随机值。然后我的会话无法连接到服务器。
需要考虑的要点:
我使用的是camel version2.13.1和camel-ftp version2.13.1。我正试图通过camel路由连接到sftp服务器。我得到了一些与jCraft Jsch异常相关的错误,如下所示。
本文向大家介绍比较公司和公司。,包括了比较公司和公司。的使用技巧和注意事项,需要的朋友参考一下 公司与公司之间的主要区别如下- 公司 成立公司 这是经营业务的实体。 注册为公司的第一步。 它被称为CORP。 它被称为INC。 第二阶段的业务。 进行公司注册手续。 持有个人资产负债。 有限责任。 成立过程的结果。 应遵循法律程序。 不要为公司筹集资金。 充当集资渠道。 与日常业务活动有关。 维护所有
#在找工作求抱抱# #如何判断面试是否凉了# #找工作中的意难平# #2023届春招# TCP和UDP的区别 C++中多态的使用(期末考试即视感) C++中类和结构体的区别(答得不好) C++空类中有什么函数(满脑子big Five,5个,用的时候都记得,名字真背不全) 数据库没问 项目也没问…… 感觉真不怎么样
大概20min 也没问太多问题 就问了我知不知道我负责的项目的后端流程 就是都什么模块啊,模块之间的关系啥的 我说不清楚 有问了下python 子类调用父类的方法 还有创建进程的都有哪些方式 还有一些其他小问题 感觉自己G了
我正在尝试从我的本地主机(在 Windows 上)测试我们的曼德里尔 API。似乎我需要配置“本地颁发者证书”。因此,我下载了 http://curl.haxx.se/ca/cacert.pem 并将其保存在我的文档根目录(c:\wamp\www)中。然后,在我的 php.ini 文件中,我配置了这个: 。 当我运行 Mandrill 的示例代码时,我收到以下错误: 出现mandrill错误:Ma
我无法从我的django站点连接到我的postgres数据库。在开始之前,我已经阅读并尝试了以下每个站点提供的说明: 詹戈设置:通灵镜2。操作错误: FATAL: 对等身份验证失败的用户 “独立” 操作错误: (心理医生 2.操作错误) FATAL: 用户的密码身份验证失败 致命:用户“根”后gresql的密码身份验证失败 postgresql: FATAL: 用户“道格拉斯”的密码身份验证失败