小编sli*_*lim的帖子

在不存在的文件上对SFTP"打开"的正确响应

我正在为Apache SSHd编写自定义文件系统类.当客户端尝试get不存在的文件时,我遇到了问题.

我的对象返回doesExist() == false.

这会导致服务器发送SSH_FX_NO_SUCH_FILE数据包以响应SSH_FXP_STAT.

使用OpenSSH客户端,这很好用:客户端报告"找不到文件'/ foo'".

但是,PSFTP(Putty SFTP客户端)对其请求进行管道传输,因此无论对STAT的响应如何,它都会发送一个OPEN数据包.然后它在生成的文件句柄上发送一个READ,它当前在我的代码中导致异常,这导致整个会话终止.

当尝试读取不存在的文件时,服务器响应应该是什么?

对于详细的道歉,这是有问题的Apache代码.我不想修改它 - 我的类是这里的SshFile"文件".但如果Apache代码肯定是错误的,我想我必须给他们一个补丁.

    if (version <= 4) {
       String path = buffer.getString();
       int pflags = buffer.getInt();
       // attrs
       try {
            SshFile file = resolveFile(path);
            if (file.doesExist()) {
                if (((pflags & SSH_FXF_CREAT) != 0) && ((pflags & SSH_FXF_EXCL) != 0)) {
                    sendStatus(id, SSH_FX_FILE_ALREADY_EXISTS, path);
                    return;
                }
            } else {
                if (((pflags & SSH_FXF_CREAT) != 0)) {
                    if (!file.isWritable()) {
                        sendStatus(id, SSH_FX_FAILURE, "Can not create " + …
Run Code Online (Sandbox Code Playgroud)

ssh sftp protocols

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

画布不允许绘图

我想从整个屏幕到TForm1画布绘制一个屏幕截图。

该代码在Delphi XE3中运行良好

procedure TForm1.Button1Click(Sender: TObject);
var
  c,scr: TCanvas;
  r,r2: TRect;
begin

  c := TCanvas.Create;
  scr := TCanvas.Create;
  c.Handle := GetWindowDC(GetDesktopWindow);
  try

    r := Rect(0, 0, 200, 200);
    form1.Canvas.CopyRect(r, c, r);

  finally
    ReleaseDC(0, c.Handle);
    c.Free;
  end;
Run Code Online (Sandbox Code Playgroud)

现在,我想先将屏幕快照复制到另一个画布。有没有办法做到这一点而不会出现此错误?

procedure TForm1.Button1Click(Sender: TObject);
var
  c,scr: TCanvas;
  r,r2: TRect;
begin

  c := TCanvas.Create;
  scr := TCanvas.Create;
  c.Handle := GetWindowDC(GetDesktopWindow);
  try

    r := Rect(0, 0, 200, 200);

    scr.CopyRect(r,c,r); <-- Error, canvas does not allow drawing
    form1.Canvas.CopyRect(r, scr, r); <-- Error, canvas does not allow drawing …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe3

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

是否可以使用 Optional.ofNullable 检查是否为空并分配默认值

我的代码从数据库读取一些配置值。如果它们未定义(由 getValueFromDB 方法返回 null),我想将它们默认为配置文件中定义的值。

是否可以Optional.ofNullable().OrElse()用于所有出现的getValueFromDB()空检查并在为空的情况下分配默认值。或者这会是滥用/滥用Optional吗?

java optional java-8

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

合并Spring引用的多个属性文件

我的Spring配置如下所示:

<jee:remote-slsb id="ejb1"
    jndi-name="org.example.Ejb1"
    business-interface="org.example.Ejb1"
    environment-ref="ejb1Properties">
</jee:remote-slsb>
<util:properties id="ejb1Properties" location="classpath:ejb1.properties"/>

<jee:remote-slsb id="ejb2"
    jndi-name="org.example.Ejb2"
    business-interface="org.example.Ejb2"
    environment-ref="ejb2Properties">
</jee:remote-slsb>
<util:properties id="ejb2Properties" location="classpath:ejb2.properties"/>
Run Code Online (Sandbox Code Playgroud)

...因为两个EJB可能使用不同的JNDI URL,不同的上下文工厂和身份验证凭据.ejb1.properties和ejb2.properties具有相同名称的属性,具有不同的值:

ejb1.properties:
  java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory
  java.naming.provider.url=t3://example1:7101
  java.naming.security.principal=id1
  java.naming.security.credential=foo

ejb2.properties:
  java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory
  java.naming.provider.url=t3://example2:7101
  java.naming.security.principal=id2
  java.naming.security.credential=bar
Run Code Online (Sandbox Code Playgroud)

但是,我希望我的用户有一个属性文件来维护,而不是两个.

显然,编写一个从核心属性文件生成ejb1.properties和ejb2.properties的启动脚本很容易.但有没有办法让Spring从单个文件获取属性,适当地映射名称?

java spring properties

4
推荐指数
1
解决办法
876
查看次数

如何配置HK2以注入工厂方法创建的对象?

在HK2中,配置注入的基本示例代码是这样的(在扩展的类中AbstractBinder:

bind(BuilderHelper
    .link(FooImpl.class)    // the class of the object to be injected
    .to(FooInterface.class) // identifies what @Inject fields to link to
    .build());
Run Code Online (Sandbox Code Playgroud)

这导致HK2 FooImpl()在需要创建时调用构造函数FooInterface.

如果FooImpl没有构造函数怎么办?

  • 如果要使用静态工厂方法进行实例化,该怎么办? FooImpl.getInstance()
  • 如果它打算由工厂对象实例化,该怎么办? fooFactory.create()

我看到ResourceConfig有一个方法,bind(FactoryDescriptors factoryDescriptors)但我不清楚构建FactoryDescriptors对象的成语是什么,并且无法在线找到任何示例.

java dependency-injection hk2

4
推荐指数
1
解决办法
6860
查看次数

泽西岛 - 没有扫描资源?

我在Tomcat中将Jersey应用程序部署为WAR.我得到了所有资源的404s,我正在试图找出原因.

由于我启用了Jersey日志记录,因此我看到一条日志消息,指示Jersey正在初始化:

INFO:   org.apache.catalina.startup.HostConfig deployWAR 
+INFO:       Deploying web application archive myApp.war 
INFO:   org.glassfish.jersey.server.ApplicationHandler initialize 
+INFO:       Initiating Jersey application, version Jersey: 2.3.1 2013-09-27 07:50:09... [.logger.j2se.BizManagerHandler]
Run Code Online (Sandbox Code Playgroud)

从其他SO帖子来看,我希望看到这样的日志作为下一行:

INFO: Scanning for root resource and provider classes in the packages:
    com.xxx.restful
Run Code Online (Sandbox Code Playgroud)

我没有看到此日志,也没有显示找到资源的任何日志 - 所以我不确定扫描是否正在发生.

web.xml范围内myApp.war包含此:

<servlet>
    <servlet-name>My Servlet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>com.example.MyConfig</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.example.myApp.rest</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
        <param-value>com.sun.jersey.api.container.filter.LoggingFilter</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
        <param-value>com.sun.jersey.api.container.filter.LoggingFilter</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.config.feature.Trace</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.config.feature.Debug</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
Run Code Online (Sandbox Code Playgroud)

我想我的日志看到的证据表明,这个servlet元素正在部署.

有没有理由我错过了为什么:

  • 扫描没有发生? …

logging tomcat jersey

4
推荐指数
1
解决办法
6596
查看次数

在Perl中`$ hash {$ key} | = {}`做什么?

我正在和一些使用哈希引用的Perl搏斗.

最后,事实证明我的问题是这一行:

$myhash{$key} |= {};
Run Code Online (Sandbox Code Playgroud)

也就是说,"给$ myhash {$ key}一个对空哈希的引用,除非它已经有一个值".

然而,解除引用并尝试将其用作哈希引用会导致使用字符串作为哈希引用的解释器错误.

将其更改为:

if( ! exists $myhash{$key}) {
  $myhash{$key} = {};
}
Run Code Online (Sandbox Code Playgroud)

......让事情奏效.

所以我没有问题.但我很好奇发生了什么事.

谁能解释一下?

perl initialization hash-reference

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

按两个参数流过滤

我google了很多,但没有找到答案.这是我有的:

    parentList.forEach(p -> {
        childList
                .stream()
                .filter(c -> p.id() == c.parentId())
                .<...continue working on stream...>
    });
Run Code Online (Sandbox Code Playgroud)

我找不到如何用谓词替换"过滤器"部分的方法,因为我似乎需要将参数传递给Predicate?

java predicate java-stream

3
推荐指数
1
解决办法
2900
查看次数

为了生成这段代码,我需要编写什么编码?

我需要这样做.

public class MyClass{

    private static IDictionary<String, Type> databaseAccessClasses
                              = new Dictionary<String, Type>();

    private static IDictionary<String, Type> DatabaseAccessClasses
    {
        get { return DataAccessFactory.databaseAccessClasses; }
        set { DataAccessFactory.databaseAccessClasses = value; }
    }

}
Run Code Online (Sandbox Code Playgroud)

.net codedom

2
推荐指数
1
解决办法
832
查看次数

Ramda的分组交叉产品

我想做FP等价的(伪代码):

var l1 = [ '1', '2', '3' ];
var l2 = [ 'a', 'b', 'c' ];

var table = []
for i in l1 {
   var row = [];
   for j in l2 {
      row.push([i, j]);
   }
   table.push(row);
}
Run Code Online (Sandbox Code Playgroud)

导致table ==:

[
   [["1", "a"], ["1", "b"], ["1", "c"]], 
   [["2", "a"], ["2", "b"], ["2", "c"]], 
   [["3", "a"], ["3", "b"], ["3", "c"]]
]
Run Code Online (Sandbox Code Playgroud)

我已经实现了这个:

const headEquals = (x,y) => R.equals(R.head(x), R.head(y));

const transform = R.compose(
   R.groupWith(headEquals),
   R.xprod
);

const …
Run Code Online (Sandbox Code Playgroud)

javascript functional-programming ramda.js

2
推荐指数
1
解决办法
213
查看次数

为什么暂停队列不是代理功能?

我正在寻找一个ActiveMQ经纪人admin命令,告诉它暂停队列-即:

  • 继续接受来自生产客户的消息
  • 停止交付给使用中的客户端,允许队列积压增长,直到恢复队列为止,随后将积压发送给客户端。

我找不到这样的命令。最常见的答案是应该在客户端对其进行管理-即找到每个消费者并停止它。其他答案是解决方法,例如操纵网络路由或防火墙,以便客户端和代理不再通信。

对其他消息队列的粗略调查表明,ActiveMQ在这方面并不罕见。

在我看来,可能无法实现此功能有两个原因:

  • 这很难实现-但我无法想到任何原因。
  • 这与消息队列的设计原理背道而驰

是什么,为什么?

activemq-classic

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

检查ac#string中的每个字符是否都是相同的字符

从任何字符串开始,我需要确定该字符串是否包含仅一个或多个指定单个字符的实例.例如"£"会通过我的测试,"wertf"会失败.我采取的方法如下:

string source = "any string";
char[] candidate = source.ToCharArray();
char validCharacter = '£';

    if (candidate.Length > 0)
    {
        // (code removed) if candidate length = 1 then just test candidate[0] against validCharacter
        bool isValid = true;
        int index = 0;

        while (index < candidate.Length - 1)
        {
            if (candidate [index] != validCharacter )
            {
                isValid = false;
                break;
            }

            index++;
        }

        if (isValid)
        {
            // success, do what needs doing
        }
    }
Run Code Online (Sandbox Code Playgroud)

正如你所料,这是有效的,但我不禁觉得我可能会错过这里的一招.是否有一种更好,更简洁的方法,这样做不会牺牲上述的清晰度?

c#

0
推荐指数
1
解决办法
119
查看次数

Java Stream:如何在每个elemnt上传递Set to Stream.of()和call方法?

我有这样的旧式代码:

        if (setContainer.getSet() == null) {
            return null;
        }
        for (SetElement setElement : setContainer.getSet()){
            if ("SomeString".equals(SetElement.getCode())) {
                return  setElement.getValue();
            }
        }
        return null;
Run Code Online (Sandbox Code Playgroud)

我试过这个,但它不会检查Set是否为null:

setContainer.getSet()
                    .stream()
                    .filter(setValue ->  "SomeValue".equals(setElement.getCode()))
                    .map(SetElement::getValue)
                    .findAny()
                    .orElse(null) ;
Run Code Online (Sandbox Code Playgroud)

据我所知,我应该使用,Stream.of() 但我不明白如何执行上面的代码,因为它总是返回Optional<Set<SetElement>>

java java-8 java-stream

0
推荐指数
1
解决办法
154
查看次数