我在wsdl中定义了以下数据类型:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="myService" targetNamespace="http://example.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://example.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
<wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="example.com" targetNamespace="example.com" version="1.0">
<xs:simpleType name="MyEnum">
<xs:restriction base="xs:string">
<xs:enumeration value="one"/>
<xs:enumeration value="two"/>
</xs:restriction>
</xs:simpleType>
<!-- SNIP other data types -->
</xs:schema>
</wsdl:types>
</wsdl:definitions>
Run Code Online (Sandbox Code Playgroud)
我希望MyEnum落入自己的包中.所以,我使用了一个jaxws绑定文件,并使用XPATH遍历模式和jaxb绑定来设置包,如下所示:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxws:bindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://java.sun.com/xml/ns/jaxws">
<jaxws:bindings node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='example.com']">
<jxb:schemaBindings>
<jxb:package name="abra.ca.dabra" /> <!-- this works, and changes package of all classes in the namespace-->
</jxb:schemaBindings>
<jxb:bindings node="//xs:simpleType[@name='MyEnum']">
<jxb:package name="a.b.c"/> <!-- this does not work -->
</jxb:bindings>
</jaxws:bindings>
<!-- SNIP - …Run Code Online (Sandbox Code Playgroud) 我按如下方式执行插入:
INSERT INTO foo (a,b,c)
SELECT x,y,z
FROM fubar
WHERE ...
Run Code Online (Sandbox Code Playgroud)
但是,如果要插入的某些行违反了foo上的重复键索引,我希望数据库忽略这些行,而不是插入它们并继续插入其他行.
有问题的数据库是Informix 11.5.目前发生的一切都是数据库抛出异常.如果我尝试处理异常:
ON EXCEPTION IN (-239)
END EXCEPTION WITH RESUME;
Run Code Online (Sandbox Code Playgroud)
...它没有帮助,因为在捕获异常后,将跳过整个插入.
我不认为informix支持INSERT IGNORE,或INSERT ... ON DUPLICATE KEY ...,但如果我错了,请随时纠正我.
是否可以限制方法可以接受的有效枚举值.
比方说,我有一个这样的枚举:
public enum WEEKDAY {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY;
}
Run Code Online (Sandbox Code Playgroud)
并说我有一个方法只接受这些值的内部集合:
//Here dayOfWeek should only be Monday - Friday.
public void setWorkDayAlarm(WEEKDAY dayOfWeek) {
}
Run Code Online (Sandbox Code Playgroud)
我知道你显然可以打开有效值,在默认情况下不做任何事情.但是在方法的接口中是否有一种方法(或模式),它只接受Java(5+)中有效枚举的某个子集?
我们有一个普通的旧java库,它可以从许多不同的应用程序中实例化.在这种情况下,每个应用程序都是一个Web应用程序,它们都位于同一个tomcat容器中.
每个应用程序使用自己的记录器记录到自己的日志文件.我们希望库生成的与特定应用程序相关的日志也会转到该应用程序单独的日志文件.
为此,一种方法是允许应用程序将其记录器传递给库:
library = new library(Logger applicationsVeryOwnLogger);
Run Code Online (Sandbox Code Playgroud)
然后使用该记录器记录库中的所有语句.但是,这意味着记录器现在是库中的类变量,并且库中的每个类都需要对库的引用才能使用正确的记录器.
有没有更好的方法来做到这一点?
我有一个包含大量echo语句的shell脚本.我想在每行输出前加上时间/日期.
所以,我取代了每一个
echo "Some text1"
echo "Some text2"
Run Code Online (Sandbox Code Playgroud)
同
echo "`date +%y/%m/%d_%H:%M:%S`:: some text1"
echo "`date +%y/%m/%d_%H:%M:%S`:: some text2"
Run Code Online (Sandbox Code Playgroud)
这相当丑陋.无论如何都要创建一个别名(或类似于C中的#define),以使其更清晰.
显然,做一些事情:
DATE=`date +%y/%m/%d_%H:%M:%S`
echo "$DATE:: some text1"
echo "$DATE:: some text2"
Run Code Online (Sandbox Code Playgroud)
...不起作用,因为在这种情况下,DATE只计算一次,每个回波的日期相同.
我正在考虑用打印函数调用替换每个echo,它使用前缀.我想知道是否有人有任何其他/更好的想法.
我在UPDATE中使用子查询:
UPDATE tableA
SET x,y,z = ( (SELECT x, y, z
FROM tableB b
WHERE tableA.id = b.id
AND (tableA.x != b.x
OR tableA.y != b.y
OR tableA.z != b.z))) );
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果子查询没有返回任何行会发生什么?它会用null做更新吗?
其次,有没有更好的方法来写这个.我基本上从tableB更新tableA中的三个字段,但只有当三个字段中的任何一个不同时才会发生更新.
从我的读数来看,似乎ScheduledExecutorService是在Java中启动和停止计时器的正确方法.
我需要移植一些启动和停止计时器的代码.这不是周期性计时器.此代码在启动之前停止计时器.所以,实际上每次启动都是一次重启().我正在寻找使用ScheduledExecutorService执行此操作的正确方法.这就是我想出的.寻找有关我缺少的事情的评论和见解:
ScheduledExecutorService _Timer = Executors.newScheduledThreadPool(1);
ScheduledFuture<?> _TimerFuture = null;
private boolean startTimer() {
try {
if (_TimerFuture != null) {
//cancel execution of the future task (TimerPopTask())
//If task is already running, do not interrupt it.
_TimerFuture.cancel(false);
}
_TimerFuture = _Timer.schedule(new TimerPopTask(),
TIMER_IN_SECONDS,
TimeUnit.SECONDS);
return true;
} catch (Exception e) {
return false;
}
}
private boolean stopTimer() {
try {
if (_TimerFuture != null) {
//cancel execution of the future task (TimerPopTask())
//If task is already running, interrupt …Run Code Online (Sandbox Code Playgroud) 所以,通常我在代码中应用JAXB注释如下:
package com.example;
@XmlRootElement(name = "Foo", namespace = "example.com")
@XmlType(name = "Foo", namespace = "example.com")
public class Foo {
...
}
Run Code Online (Sandbox Code Playgroud)
Foo是一个java类,用于与Web服务进行通信(通过Spring/CXF).上面的注释有助于在wsdl中适当地生成XML Schema.
我遇到了无法修改类本身的情况,但我可以为生成模式的代码提供jaxb外部绑定文件.请注意,类中存在@XmlRootElement.
如何编写与上述注释相同的等效绑定文件?
我有一个groovy脚本createWidget.groovy:
import com.example.widget
Widget w = new Widget()
Run Code Online (Sandbox Code Playgroud)
当我像这样运行它时,这个脚本运行得很好:
$ groovy -cp /path/to/widget.jar createWidget.groovy
Run Code Online (Sandbox Code Playgroud)
但是,我想在脚本中硬编码类路径,以便用户不需要知道它在哪里,所以我修改了createWidget.groovy如下(这是在groovy中修改类路径的方法之一):
this.getClass().classLoader.rootLoader.addURL(new File("/path/to/widget.jar").toURL())
import com.example.widget
Widget w = new Widget()
Run Code Online (Sandbox Code Playgroud)
但是这总是在导入时出现运行时错误:unable to resolve class com.example.widget.
这看起来非常正统,我想你不能在导入之前搞乱rootLoader,还是别的什么?
我会保持简单.Restful URI类似于:
example.com/rest/customer/1
Run Code Online (Sandbox Code Playgroud)
"1"的最佳常见做法是什么.它是db生成的主键吗?
使用系统生成的主键让我觉得它不利于:
不使用主键有自己的一组问题.寻找关于这个主题的流行思想.