我开始使用 StringTemplate 4,我正在尝试从存储在数据库中的简单字符串创建模板。我使用这样的东西:
STGroup group = new STGroupString(null, someTemplateString, '$', '$');
ST st = group.getInstanceOf(someTemplateName);
st.add(someAttribute, someValue);
Run Code Online (Sandbox Code Playgroud)
现在,如果我定义的全部或少于为模板定义的属性,则一切正常someTemplateName。现在,如果我尝试添加一个不存在的属性,则会出现以下异常:
no such attribute: fake
java.lang.IllegalArgumentException: no such attribute: fake
...
Run Code Online (Sandbox Code Playgroud)
这是有道理的。但是,我似乎无法事先知道为 template 定义了哪些属性someTemplateName。我期待找到类似的东西:
bool isDef = st.isDefined(someAttribute);
Run Code Online (Sandbox Code Playgroud)
但是没有这样的方法。我对么?有没有办法解决?
这非常令人费解.我有一个使用Gradle构建的多模块多语言JVM项目.我有几个java模块和几个scala模块.scala模块使用ScalaTest作为测试框架.我设置Gradle使用scalatest插件来运行测试.我让整个事情像IntelliJ中的魅力运行了大约一个月(使用Gradle idea插件).现在,ScalaTest规范突然不再从IDE运行,并出现以下错误:
Unable to load a Suite class. This could be due to an error in your runpath. Missing class: com.mypackage.MySpec
Run Code Online (Sandbox Code Playgroud)
有人知道发生了什么吗?我不确定自从我第一次设置构建文件以来可能已经搞砸了什么已经改变了.这真令人沮丧.想法?
编辑:显然我的junit测试也不会运行.看起来编译的类不在Intellij使用的类路径上.如果我尝试运行JUnit测试用例,这就是我得到的:
Class not found: "com.mypackage.MyUnitTests"
Run Code Online (Sandbox Code Playgroud) 我最近开始为一个项目编写一个通用的对象映射器,并遇到了一些我不太了解的东西.鉴于以下内容:
public class G<X> {
public G(Class<X> c) { }
public void m(X x) { }
public static <T> G<T> create(Class<T> c) {
return new G<T>(c);
}
public static void main(String[] args) {
Object o = ""; // irrelevant!
G<?> t = create(o.getClass());
t.m(o);
}
}
Run Code Online (Sandbox Code Playgroud)
我收到以下编译错误:
m(capture#402 of ?) in G<capture#402 of ?> cannot be applied to (java.lang.Object)
Run Code Online (Sandbox Code Playgroud)
我似乎无法找到一种正确的方法t来进行编译.我错过了什么?使用JDK 1.6.
编辑:
这不是一个学术问题.我正在尝试将一个映射器从hibernate对象编写到相应的DTO,以便在REST层中传递.假设对于每个ORM对象Foo,可能存在一个FooDTO具有构造函数的类,该构造函数将实例Foo作为参数.映射Foo到的泛型类FooDTO将封装此假设并抛出适当的异常(如果FooDTO不存在或没有正确的构造函数): …
我已经成功使用了BatchSqlUpdate一段时间了。使用它的唯一麻烦之处在于,需要使用declareParameteror setParameter方法运行任何查询之前,必须注册命名参数。这意味着还必须声明参数的类型。但是,Spring还提供了一个NamedParameterJdbcTemplate类,该类具有一种非常方便的batchUpdate方法,该方法将命名参数作为输入(地图或SqlParameterSource对象的数组)作为输入,而无需先声明它们。最重要的是,该类可以轻松重用,并且我也相信它是线程安全的。所以我对此有两个问题:
BatchSqlUpdate要求声明的参数NamedParameterJdbcTemplate?感谢您的想法!
乔万尼
我已经定义了一个由记录组成的Avro模式,该记录包含两个(或更多)不同记录的并集,例如:
{
"type":"record",
"name":"MyCompositeRecord",
"fields":
[
{"name":"SomeCommonData","type":"string"},
{"name":"MoreCommonData","type":"float"},
{"name":"CompositeRecord","type":
[
{
"type":"record",
"name":"FirstOption",
"fields":
[
{"name":"x","type":"string"},
{"name":"y","type":"long"}
]
},
{
"type":"record",
"name":"SecondOption",
"fields":
[
{"name":"z","type":"int"},
{"name":"w","type":"float"},
{"name":"m","type":"double"},
{"name":"l","type":"boolean"}
]
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
它看起来不太清楚,但我希望你能得到这个想法:我有一个由一些数据组成的记录("SomeCommonData"和"MoreCommonData")和两个不同类型记录的联合("FirstOption"和"SecondOption") .在序列化/反序列化时,我应该能够创建两个子记录中的任何一个并序列化"MyCompositeRecord".
我没有尝试为模式生成代码,因为我打算只使用通用记录.但是,我不确定这些通用记录是否以及如何序列化.我在网上找不到任何例子.我将使用java来序列化/反序列化.我能够为模式创建一个编写器/阅读器,如下所示:
Schema.Parser parser = new Schema.Parser();
Schema schema = parser.parse(COMPOSITE_SCHEMA);
DatumWriter<GenericRecord> writer = new GenericDatumWriter<>(schema);
DatumReader<GenericRecord> reader = new GenericDatumReader<>(schema);
GenericRecord datum = new GenericData.Record(schema);
Run Code Online (Sandbox Code Playgroud)
关于如何从这里开始实际构建记录的任何想法?
谢谢
我有创建和使用集合的代码,例如:
List<Map<String, Object>> tableData;
Run Code Online (Sandbox Code Playgroud)
该映射列表由n 个映射填充,每个映射代表数据库中的一行。每行都表示为字段名称和与该字段对应的对象之间的映射(在这种情况下类型不相关)。某些字段可能会丢失。字段数m始终远小于行数 ( n ≈ 10000 × m )。我需要多次重复使用同一个集合来读取所有行,所以我不能只使用某种惰性迭代器。
是否有一个有效的数据结构来存储它?Guava 提供了一个Table集合,但似乎不符合要求。我正在考虑创建一个界面,例如:
interface TableData{
int size();
Map<String, Object> get(int i);
// ... (interators, etc.)
}
Run Code Online (Sandbox Code Playgroud)
然后创建一个使用一个的实现Map<String,List<Object>>,以便我只实例化m个列表而不是n 个映射,并且仅在需要时动态创建映射,但我想知道是否有更通用的数据结构。
谢谢
根据标题,是否有办法为所有子项目提供汇总的项目报告?在我的build.gradle中,我有类似的东西:
subprojects {
apply plugin: 'project-report'
// ... more stuff
}
Run Code Online (Sandbox Code Playgroud)
但后来每个子项目最终得到一份报告.将所有报告放在一个地方会很好,但我无法弄清楚如何.这可能吗?
我正在 Gradle-fing 一个具有以下结构的遗留项目:
root
+--- common
| \--- config
+--- module1
\--- module2
Run Code Online (Sandbox Code Playgroud)
在原始项目中,config它只是一个文件夹,其中包含针对不同环境组织在子文件夹中的配置文件。它包含一个顶级文件夹props和许多子文件夹,如下所示:
config
\--- props
+--- prod
+--- dev
+--- john
\--- mike
Run Code Online (Sandbox Code Playgroud)
该项目可以配置为使用任何子文件夹。配置通过如下所示的方法加载:
Config.class.getClassLoader().getResourceAsStream("props/" + ENV + "/" + name);
Run Code Online (Sandbox Code Playgroud)
其中ENV定义环境(它是系统属性),即它可以是prod、dev、mike等,并且name只是要加载的文件的名称。
运行测试时,我需要props在类路径中包含该文件夹。在构建生产工件(JAR 和 WAR)时,我不想避免这种情况,并且仅手动复制我需要的文件,以避免可能的冲突或事故。
所以我决定制作config自己的 Gradle 项目,并将其作为 testCompile 依赖项添加到其他需要配置的模块中。但是,如果我将该props文件夹添加为 Gradle 中的资源文件夹,则该config模块的生成 JAR 文件将展平该文件夹的所有子文件夹props(这是预期的行为),因此上面的代码将会失败。
我的问题是:有没有办法告诉 Gradle 将这些文件复制到名为 props 的子文件夹中,而不是复制到 JAR 的根目录中?
我知道重构项目并移动文件夹很容易,但我们正处于从遗留构建和部署工具过渡的阶段,并且希望尽可能保持原始结构,直到我们可以完全切换到 Gradle。这是一个迭代过程,不可能一蹴而就。所以我需要一个临时解决方案。
我正在寻找使用我的JAX-RS REST服务上的注释生成文档和客户端代码(使用各种语言,如Java,Scala,Ruby,JavaScript等)的工具.理想情况下,我想运行一个后期构建工具,给定我的REST服务类所在的包,将使用源代码上的(自定义)注释和一些最小配置生成文档和代码.Swagger的功能,但无需部署其servlet和所有这些东西.我试着弯曲swagger-codegen这样做没有运气.文档很小且分散,示例很少.我无法想象这不是一个解决的问题.想法?
以下代码抛出IllegalArgumentException:
trait T{
val x: Long
require(x > 0)
}
object T extends App{
val y = new T{ val x = 42L }
}
Run Code Online (Sandbox Code Playgroud)
而以下不是:
trait T{
def x(): Long
require(x() > 0)
}
object T extends App{
val y = new T{ def x() = 42L }
}
Run Code Online (Sandbox Code Playgroud)
这是为什么?何时被require()召唤?为什么val在这一点上定义了均匀的?
我有一个带有基于令牌的用户身份验证的Jersey REST应用程序.当请求进入时,RestContext会创建一个自定义对象并将其添加到ContainerRequestContext属性中(通过在收到请求后立即运行的过滤器).此上下文管理用户授权(通过角色)和对其他业务逻辑的访问.它可用于执行业务逻辑的资源.处理请求时,将RestContext在管道最末端执行的第二个过滤器中清除.
这工作正常,虽然它需要两个过滤器.我一直在阅读关于HK2的使用InjectionResolver和我想知道我是否可以使用注入RestContext在我的资源和其他过滤器中注入这个(例如我有一个过滤器创建一个SecurityContext来自RestContext)但我找不到答案.通常,如何根据请求上下文为每个请求注入一个对象?这甚至可能吗?有没有更简单的方法,例如,使用@Context?
编辑:正如所指出的,我基本上试图在我的资源中注入一个自定义类的文档.但是,我似乎无法正确注册我AbstractBinder绑定我的类的注入.我得到以下内容:
org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at Injectee(requiredType=RestContext,parent=RestContextFilter,qualifiers={}),position=0,optional=false,self=false,unqualified=null,1435496015)
Run Code Online (Sandbox Code Playgroud)
编辑 2:我设法取得了一些进展.我通过以下方式创建配置:
new ResourceConfig(allResources())
.packages(packagesToScan())
.registerInstances(new RestContextBinder());
Run Code Online (Sandbox Code Playgroud)
因为文档明确指出不是通过类而是通过实例来支持绑定器的注入.
但是我现在得到这个:
A MultiException has 3 exceptions. They are:
1. java.lang.IllegalStateException: Not inside a request scope.
2. java.lang.IllegalArgumentException: While attempting to resolve the dependencies of my.package.RestContextFilter errors were found
3. java.lang.IllegalStateException: Unable to perform operation: resolve …Run Code Online (Sandbox Code Playgroud) 我正在使用代码生成工具,并且需要转换这样的方法调用(它是java):
public MyObjectType MyObjectType(){
Run Code Online (Sandbox Code Playgroud)
转换成更java的版本:
public MyObjectType myObjectType(){
Run Code Online (Sandbox Code Playgroud)
我有这个Scala代码的工作片段来做到这一点:
val pattern = """[\s]+public[\s]+[\w]+[\s]+([\w]+\(\))\{""".r
val tmp = pattern.findAllIn(s).matchData map { m =>
val x = m.group(1).replaceAll("\\(\\)", "\\\\(\\\\)")
s.replaceAll(x, firstLowerCase(x))
}
// if there is no match, return unmodified string,
// otherwise return the only match
val converted = if (tmp.isEmpty) s else tmp.next()
Run Code Online (Sandbox Code Playgroud)
哪一s行代码是转换的可能候选者。
该函数firstLowerCase定义为:
def firstLowerCase(s: String): String = {
val (first, rest) = s.splitAt(1)
first.toLowerCase + rest
}
Run Code Online (Sandbox Code Playgroud)
上面的代码工作正常,但是我想知道是否有可能将其精简一些(理想情况下简化为单个模式match语句),例如,通过(以某种方式)删除()to 的显式转换\(\),进行匹配并替换为一个拍摄或将上述功能纳入替代品。我不是正则表达式专家,所以也许这个问题太多了。有想法吗?