小编Chr*_*ott的帖子

Java中的高效XSLT管道(或将结果重定向到源)

我有一系列相互馈送的XSL 2.0样式表,即样式表A的输出馈送B馈送C.

这样做最有效的方法是什么?重新提出的问题是:如何有效地将一个转换的输出路由到另一个转换.

这是我的第一次尝试:

@Override
public void transform(Source data, Result out) throws TransformerException{
    for(Transformer autobot : autobots){
        if(autobots.indexOf(autobot) != (autobots.size()-1)){
            log.debug("Transforming prelim stylesheet...");
            data = transform(autobot,data);
        }else{
            log.debug("Transforming final stylesheet...");
            autobot.transform(data, out);
        }
    }
}

private Source transform(Transformer autobot, Source data) throws TransformerException{
    DOMResult result = new DOMResult();
    autobot.transform(data, result);
    Node node = result.getNode();
    return new DOMSource(node);
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我正在使用DOM来处理转换之间,虽然它很方便,但它并不是非最佳性能.

是否有任何简单的方法可以说,将SAXResult路由到SAXSource?StAX解决方案将是另一种选择.

我知道像XProc这样的项目,如果你还没有看过,这是非常酷的,但我不想投资整个框架.

java xslt dom pipeline sax

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

VSCode中的动态代码段评估

片段是否可以在Visual Studio代码中插入动态计算的完成或片段?

我想要一个用于插入各种格式的日期和时间字符串的代码段.例如,如果键入date,将自动扩展ISO格式的当前日期.

带日期的动态代码段扩展示例

Sublime Text中有一个工具可以通过类中的on_query_completions方法在python API中执行此操作EventListener.那里的实现非常简单:

def on_query_completions(self, view, prefix, locations):
  if prefix == 'date':
    val = datetime.now().strftime('%Y-%m-%d')
  return [(prefix, prefix, val)] if val else []
Run Code Online (Sandbox Code Playgroud)

我已阅读有关用户定义代码段的文档,但似乎只能插入预定义文本,其中包含用户填写的制表位和变量.

如果使用代码段API公开的功能无法实现这一点,我是否可以通过较低级别的插件/扩展API实现类似的功能?

我确实知道有一个名为Insert Date and Time的现有扩展,但这可以通过命令托盘而不是动态扩展来实现.

visual-studio-code vscode-extensions

9
推荐指数
2
解决办法
1238
查看次数

使用| @ |进行验证 在斯卡拉兹

背景

我有Map[String,String]配置值.我想提取一系列密钥,并提供有意义的错误消息,如果缺少任何密钥.例如:

val a = Map("url"->"http://example.com", "user"->"bob", "password"->"12345")
Run Code Online (Sandbox Code Playgroud)

假设我想将其转换为案例类:

case class HttpConnectionParams(url:String, user:String, password: String)
Run Code Online (Sandbox Code Playgroud)

现在,我可以简单地使用for循环来提取值:

for(url <- a.get("url"); 
    user <- a.get("user"); 
    password <- a.get("password")) yield {  
  HttpConnectionParams(url,user,password) 
}
Run Code Online (Sandbox Code Playgroud)

得到一个Option[HttpConnectionParams].这很干净,除非我得到一个None然后我不知道缺少什么.我想提供这些信息.

使用Scalaz验证

输入scalaz.我使用的是7.1.3版本.

从我能够组合起来(这里有一个很好的参考)我可以使用析取:

for(url <- a.get("url") \/> "Url must be supplied"; 
    user <- a.get("user") \/> "Username must be supplied"; 
    password <- a.get("password") \/> "Password must be supplied") yield {  
  HttpConnectionParams(url,user,password) 
}
Run Code Online (Sandbox Code Playgroud)

这很好,因为现在我收到一条错误信息,但这是铁路导向的,因为它在第一次失败时停止.如果我想获得所有错误怎么办?让我们使用验证和applicative builder(又名"| @ |"):

val result = a.get("url").toSuccess("Url must …
Run Code Online (Sandbox Code Playgroud)

scala scalaz

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

为什么Scala不允许List.map _并在REPL中键入签名

背景

我最近参加了一个初学者Scala聚会,我们正在谈论方法和功能之间的区别(这里也进行了深入讨论).

例如:

scala> val one = 1
one: Int = 1

scala> val addOne = (x: Int) => x + 1
addOne: Int => Int = <function1>
Run Code Online (Sandbox Code Playgroud)

这表明val不仅可以具有整数类型,而且可以具有函数类型.我们可以在scala repl中看到类型:

scala> :type addOne
Int => Int
Run Code Online (Sandbox Code Playgroud)

我们还可以在对象和类中定义方法:

scala> object Foo {
 |   def timesTwo(op: Int) = op * 2
 | }
defined module Foo
Run Code Online (Sandbox Code Playgroud)

虽然方法没有类型(但是具有类型签名),我们可以将其提升为函数以查看它是什么:

scala> :type Foo.timesTwo
<console>:9: error: missing arguments for method timesTwo in object Foo;
follow this method with `_' if you want to treat …
Run Code Online (Sandbox Code Playgroud)

scala

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

HTTP到JMS桥

概观

我想将一个消息队列暴露给互联网,以便客户端应用程序可以与我们的一些后端服务进行通信.

由于安全原因,我不想直接公开jms端点.此外,普通的HTTP传输可以避免将jms插件分发到异构客户端应用程序(.net,java,javascript)的需要.

研究成果

ActiveMQ的

我看了一下ActiveMQ的"内置"REST接口:

http://activemq.apache.org/rest.html

但在测试中,我发现该演示不可靠(即"我的消息在哪里?").此外,关于如何将演示拉入"真正的"实现,没有详细记录.

ESB

由于这听起来像企业集成模式中的经典"桥"模式,我看了主要的开源ESB/SOA集成引擎:

  • Spring集成
  • 马骡
  • ServiceMix的

在这三个中,最清晰的文档似乎是ServiceMix,它提供了一个In-only消息模式,我需要POST和GET消息.

不幸的是,对于评估条款,我似乎不得不深入研究每个实现和配置.我意识到开箱即用的设置可能太多了,但我宁愿不学习所有这三个,只考虑哪一个最符合我的需求.所以...

问题

  • 你有没有实现类似的架构?你用了什么?
  • 无论您现在建议的第一个答案是什么?
  • 哪个最简单?

soa esb jms http

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

Control.BeginInvoke不会执行委托的原因?

概观

是否有解释Control.BeginInvoke()不执行它传递的委托?

代码示例

我们在Winforms应用程序中采用了以下模式,以便在UI线程上安全地执行UI相关工作:

private Control hiddenControl = new Control();

private void uiMethod()
{
  MethodInvoker uiDelegate = new MethodInvoker(delegate()
  {
    Logging.writeLine("Start of uiDelegate");
    //ui releated operations
    childDialog = new ChildDialog();
    childDialow.show();
    Logging.writeLine("End of uiDelegate");
  });

  if (hiddenControl.InvokeRequired)
  {
    Logging.writeLine("Start of InvokeRequired block");
    hiddenControl.BeginInvoke(uiDelegate);
    Logging.writeLine("End of InvokeRequired block");
  }
  else
  {
    uiDelegate();
  }
}
Run Code Online (Sandbox Code Playgroud)

在这里,我们显式创建一个控件"hiddenControl",以便在UI线程上运行委托.我们从不调用endInvoke,因为它显然不是 Control.BeginInvoke所必需的,我们永远不需要返回值,因为我们的方法只是操纵UI,无论如何.

虽然非常冗长,这种格局似乎是一个比较 接受的 解决方案.然而,有一些证据表明即使这种模式在所有情况下都不能很好地发挥作用.

意见

我不排除应用程序错误并指责WinForms.毕竟,选择可能不会破碎.然而,我无法解释为什么代表似乎根本没有参与竞选.

在我们的例子中,我们有时会观察到"开始uiDelegate"日志消息从未在某些线程场景中执行,即使"Start of InvokeReqiured block"和"End of InvokeRequired block"成功执行.

复制此行为非常困难,因为我们的应用程序是作为DLL提供的; 我们的客户在自己的应用程序中运行它.因此,我们无法保证可以调用这些方法的方式或方式.

我们排除了UI线程饥饿,因为观察到UI没有锁定.据推测,如果UI正在更新,则消息泵可操作并可用于从消息队列中提取消息并执行其委托. …

c# multithreading begininvoke winforms

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

获取sbt中jar组装路径的参考

我正在使用sbt-izpack来构建安装程序。好像有一个错误,其中包文件名的变量未正确引用。我希望传递一个变量,以便主jar正确包装为:

variables in IzPack += ("artifactName", artifactFileName.value )
Run Code Online (Sandbox Code Playgroud)

问题是我不知道如何获取主工件的路径字符串。该文档说,我可以在地图包,并获得(Artifact, File)对像这样:

val artifactFileName = settingKey[String]("My task.")

artifactFileName :=  {
  val (art, file) = packagedArtifact.in(Compile, packageBin).value
  println("Artifact definition: " + art)
  println("Packaged file: " + file.getAbsolutePath)
  file.getAbsolutePath
}
Run Code Online (Sandbox Code Playgroud)

但是sbt对此抱怨A setting cannot depend on a task

有没有一种方法可以某种方式获取主装配的路径而无需首先生成它(在任务中),以便可以通过设置将其传递?

或者,是否有某种方式可以更新任务中提供给izpack的设置?

sbt

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