在我的办公室里,仅仅提到Xerces这个词就足以煽动开发者的凶悍愤怒.粗略地看一眼其他Xerces关于SO的问题似乎表明,几乎所有Maven用户都会在某个时候"触及"这个问题.不幸的是,理解这个问题需要对Xerces的历史有一点了解......
Xerces是Java生态系统中使用最广泛的XML解析器.几乎每个用Java编写的库或框架都以某种身份使用Xerces(传递,如果不是直接的话).
包含在官方二进制文件中的Xerces罐子直到今天还没有版本化.例如,Xerces 2.11.0实现jar是命名的xercesImpl.jar
而不是xercesImpl-2.11.0.jar
.
Xerces团队不使用Maven,这意味着他们不会将正式版本上传到Maven Central.
Xerces曾经作为单个jar(xerces.jar
)发布,但被分成两个jar,一个包含API(xml-apis.jar
),另一个包含这些API的实现(xercesImpl.jar
).许多较旧的Maven POM仍然声明依赖xerces.jar
.在过去的某个时刻,Xerces也被释放xmlParserAPIs.jar
,一些较老的POM也依赖于它.
分配给xml-apis和xercesImpl的版本由那些将其jar部署到Maven存储库的人通常是不同的.例如,xml-apis可能是1.3.03版本,而xercesImpl可能是2.8.0版本,即使两者都来自Xerces 2.8.0.这是因为人们经常使用它实现的规范版本来标记xml-apis jar.还有就是这是一个非常不错的,但不完全击穿这里.
更复杂的是,Xerces是包含在JRE中的Java API for XML Processing(JAXP)的参考实现中使用的XML解析器.实现类在com.sun.*
命名空间下重新打包,这使得直接访问它们很危险,因为它们可能在某些JRE中不可用.但是,并非所有Xerces功能都通过API java.*
和javax.*
API 公开; 例如,没有API公开Xerces序列化.
几乎所有的servlet容器(JBoss,Jetty,Glassfish,Tomcat等)都会在一个或多个/lib
文件夹中附带Xerces .
对于上述某些原因(或许是全部原因),许多组织在其POM中发布和使用Xerces的自定义构建.如果你有一个小应用程序并且只使用Maven Central,这不是一个真正的问题,但它很快成为企业软件的问题,其中Artifactory或Nexus代理多个存储库(JBoss,Hibernate等):
例如,组织A可能发布xml-apis
为:
<groupId>org.apache.xerces</groupId>
<artifactId>xml-apis</artifactId>
<version>2.9.1</version>
Run Code Online (Sandbox Code Playgroud)
同时,组织B可能会发布jar
如下:
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
<version>1.3.04</version>
Run Code Online (Sandbox Code Playgroud)
虽然B的jar
版本低于A版jar
,但Maven并不知道它们是同一个版本,因为它们有不同
groupId
的版本.因此,它无法执行冲突解决,并且两个
jar
s都将作为已解析的依赖项包含在内:
在遵循Michael Hartl的Ruby on Rails教程的Rails 4 Beta版本时,我的应用程序无法在Heroku上启动,但在本地运行良好.检查显示以下错误:bundle exec rails server
heroku logs -t
$ heroku[web.1]: State changed from crashed to starting
$ heroku[web.1]: Starting process with command `bin/rails server
-p 33847 -e $RAILS_ENV`
$ app[web.1]: bash: bin/rails: No such file or directory
$ heroku[web.1]: Process exited with status 127
$ heroku[web.1]: State changed from starting to crashed
$ heroku[web.1]: Error R99 (Platform error) -> Failed to launch the
dyno within 10 seconds
$ heroku[web.1]: Stopping process with …
Run Code Online (Sandbox Code Playgroud) 我在汇编时使用了堆栈,但我不知道推送ebp和pop ebp.
.intel_syntax noprefix
.include "console.i"
.text
askl: .asciz "Enter length: "
askb: .asciz "Enter breadth: "
ans: .asciz "Perimeter = "
_entry:
push ebp # establishing stack-frame
mov ebp, esp
sub esp, 12
Prompt askl
GetInt [ebp-4] # length
Prompt askb
GetInt [ebp-8] # breadth
mov eax, [ebp-4] # eax = l
add eax, [ebp-8] # eax = l + b
add eax, eax # eax = 2 * (l + b)
mov [ebp-12], eax
Prompt ans
PutInt [ebp-12] …
Run Code Online (Sandbox Code Playgroud) 给定一个表名和一个列名,我试图动态地删除一个我不知道提前名称的Oracle约束.
我可以使用此查询找到约束名称:
SELECT CONSTRAINT_NAME
FROM USER_CONS_COLUMNS
WHERE TABLE_NAME = 'MyTable' AND
COLUMN_NAME='MyColumn' AND POSITION IS NULL
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是使用子查询,但这不起作用并导致ORA-02250错误:
ALTER TABLE MyTable
DROP CONSTRAINT (
SELECT CONSTRAINT_NAME
FROM USER_CONS_COLUMNS
WHERE TABLE_NAME = 'MyTable' AND
COLUMN_NAME='MyColumn' AND POSITION IS NULL)
Run Code Online (Sandbox Code Playgroud)
到目前为止,我所拥有的唯一可行解决方案如下,但感觉不必要的复杂:
DECLARE
statement VARCHAR2(2000);
constr_name VARCHAR2(30);
BEGIN
SELECT CONSTRAINT_NAME INTO constr_name
FROM USER_CONS_COLUMNS
WHERE table_name = 'MyTable' AND
column_name = 'MyColumn' AND position is null;
statement := 'ALTER TABLE MyTable DROP CONSTRAINT '|| constr_name;
EXECUTE IMMEDIATE(statement);
END;
/
Run Code Online (Sandbox Code Playgroud)
有没有办法用子查询做到这一点,正如我原先打算的那样?如果没有,任何人都可以建议一个更简洁的方法来做到这一点?
假设我有一个视图,其中一些列名是别名,例如本例中的"surName":
CREATE VIEW myView AS
SELECT
firstName,
middleName,
you.lastName surName
FROM
myTable me
LEFT OUTER JOIN yourTable you
ON me.code = you.code
GO
Run Code Online (Sandbox Code Playgroud)
我可以使用INFORMATION_SCHEMA视图检索有关视图的一些信息.
例如,查询
SELECT column_name AS ALIAS, data_type AS TYPE
FROM information_schema.columns
WHERE table_name = 'myView'
Run Code Online (Sandbox Code Playgroud)
收益率:
---------------- |ALIAS |TYPE | ---------------- |firstName |nchar| |middleName|nchar| |surName |nchar| ----------------
但是,我想知道实际的列名.理想的情况是:
--------------------------- |ALIAS |TYPE |REALNAME | --------------------------- |firstName |nchar|firstName | |middleName|nchar|middleName| |surName |nchar|lastName | ---------------------------
如何根据别名确定实际列名称是什么? 必须有一些方法来使用sys表和/或INFORMATION_SCHEMA视图来检索此信息.
编辑: 我可以接受这种令人厌恶的东西,这与Arion的答案相似:
SELECT
c.name AS ALIAS,
ISNULL(type_name(c.system_type_id), t.name) AS DATA_TYPE,
tablecols.name AS REALNAME …
Run Code Online (Sandbox Code Playgroud) 我想启用m2e v 1.0中不可用的旧插件
我已将此添加到POM中,但如果有多个项目则不起作用.
<pluginManagement>
<plugins>
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>[0.0.0,)</version>
<goals>
<goal>unpack</goal>
</goals>
</pluginExecutionFilter>
<action>
<execute />
</action>
</pluginExecution>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>[0.0.0,)</version>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
</pluginExecutionFilter>
<action>
<execute />
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
Run Code Online (Sandbox Code Playgroud)
我也试过以下变化.
<pluginManagement>
<plugins>
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<lifecycleMappings>
<lifecycleMapping>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>[0.0.0,)</version>
<goals>
<goal>unpack</goal>
</goals>
</pluginExecutionFilter>
<action>
<execute />
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMapping>
<lifecycleMapping>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter> …
Run Code Online (Sandbox Code Playgroud) 我正在使用第三方库来返回原始迭代器,例如
Iterator<?> children = element.getChildElements();
Run Code Online (Sandbox Code Playgroud)
我知道实际的类型,但我不一定相信第三方lib将来会坚持使用它.有两种(我可以想到)有些冒险的方法来遍历这个:
@SuppressWarnings("unchecked")
Iterator<ActualObject> currentChildren = (Iterator<ActualObject>)currentElement.getChildElements();
Run Code Online (Sandbox Code Playgroud)
要么
Iterator<?> children = element.getChildElements();
while (null != children && children.hasNext()) {
ActualObject child = (ActualObject)children.next(); //Possible ClassCastException @ runtime
...
}
Run Code Online (Sandbox Code Playgroud)
我可以想出来遍历这种迭代器的唯一"安全"方法如下:
Iterator<?> children = element.getChildElements();
while (null != children && children.hasNext()) {
Object obj = children.next();
ActualObject child = null;
if (obj instanceof ActualObject)
child = (ActualObject)obj;
...
}
Run Code Online (Sandbox Code Playgroud)
这似乎过于冗长.是否有更好,但同样"安全"的方式来遍历原始迭代器?
编辑:我意识到我可以在else块中捕获/记录异常,我正在寻找(希望)Java语言等同于ColinD在下面提到的内容.
我正在使用maven-antrun-plugin与Ant做一堆工作,最终产生一个zip文件.我想将zip文件部署到我们的maven服务器(Artifactory).maven-antrun-part按预期工作并成功创建zip文件; 但部署失败,并显示以下错误消息:
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.6:deploy (default-deploy) on project projectname: The packaging for this project did not assign a file to the build artifact
我的POM文件如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.company.division</groupId>
<artifactId>projectname</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<parent>
<groupId>com.company.product</groupId>
<artifactId>parentproject</artifactId>
<version>1.0.0</version>
</parent>
<distributionManagement>
<snapshotRepository>
<id>artifactory</id>
<name>artifactory-snapshots</name>
<url>http://localartifactoryserver/artifactory/libs-snapshot-local</url>
<uniqueVersion>false</uniqueVersion>
</snapshotRepository>
</distributionManagement>
<dependencies>
<!-- Some dependencies... -->
</dependencies>
<build>
<plugins>
<!-- Compiler plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF8</encoding>
<optimize>true</optimize>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>compile</id> …
Run Code Online (Sandbox Code Playgroud) 虽然可能是不明智的,但是通过使用URI方案来读取基本上重命名的.zip文件(.ear,.war,.jar等)的存档格式是可能的.jar:
例如,当uri
变量求值为单个顶级归档时,以下代码可以正常工作,例如当uri
等于时jar:file:///Users/justingarrick/Desktop/test/my_war.war!/
private FileSystem createZipFileSystem(Path path) throws IOException {
URI uri = URI.create("jar:" + path.toUri().toString());
FileSystem fs;
try {
fs = FileSystems.getFileSystem(uri);
} catch (FileSystemNotFoundException e) {
fs = FileSystems.newFileSystem(uri, new HashMap<>());
}
return fs;
}
Run Code Online (Sandbox Code Playgroud)
然而,getFileSystem
和newFileSystem
调用失败的IllegalArgumentException
时候URI包含嵌套压缩文件,例如,当uri
平等jar:jar:file:///Users/justingarrick/Desktop/test/my_war.war!/some_jar.jar!/
(一的.jar一个内部的.war).
java.net.URI
嵌套存档文件是否有有效的方案?
我目前正在开发一个网站,允许用户搜索自定义产品目录.我一直在环顾四周,并希望利用Orchard CMS来帮助我开发这个网站.我目前在定制的Orchard Modules和Skywalker博客系列中经历了Ron Petersons youtube 系列.
我觉得我的目标是可能的,但我正在寻找一些关于我的策略是否可以在Orchard框架内工作的验证.
这是我目前的情况:
我有一个指向SQL DB的默认Orchard配置(名为Product-Orchard)
我有一个指向另一个SQL DB(名为Products)的自定义DAL.
产品由您的典型信息(产品名称,描述,价格等)组成.
自定义DAL具有名为Product(具有要与之交互的存储库)的POCO模型,其属性为Name,Description,Price.
现在,基于我读到的有关创建Orchard模块的信息,似乎创建具有自定义内容的自定义模块的方法是:
通过代码生成工具创建模块(我们称之为ProductModule)
创建自定义内容部件(ProductPart)
创建自定义内容部件记录(ProductPartRecord)以充当部件的数据模型.
创建一个自定义ContentPartHandler(ProductPartHandler)来处理内容部分的持久性.
创建自定义驱动程序,该驱动程序是用于准备用于呈现UI的形状的条目.
可能创建一个与驱动程序交互的服务?
这是事情开始变得混乱的地方,我不确定这是否可能.我想要做的是创建一个由我的自定义DAL支持的自定义内容类型,而不是通过Product-Orchard DB中的ContentPartRecord存储数据,但仍然允许它由Lucene模块索引以允许用于搜索产品目录.
是否可以创建由不同数据源支持并仍然利用Lucene搜索功能的自定义ContentType和/或ContentPart?
在高级术语中,我想要一个Product ContentType,其中ContentItems实际存储在我的辅助数据库中,而不是Orchard数据库中(并且仍然希望能够通过Projections利用Lucene搜索).
我在一个目录中有许多SQL脚本,前缀是数字,例如
目前,我可以使用此脚本循环遍历它们:
@ECHO OFF
FOR /r . %%F IN (*.sql) DO (
ECHO File:"%%F"
)
Run Code Online (Sandbox Code Playgroud)
但是,由于Windows读取目录中文件的方式,在2之前读取10和11,等等:
如何按照前缀的顺序遍历目录中的每个文件?
我正在尝试创建一个通用的Web服务,它始终以"OK"响应,无论请求的标题或正文内容如何.我可以在Axis2中用a做这个RawXMLInOutMessageReceiver
,但我更愿意使用JAX-WS(我是全新的).到目前为止,我有一个简单的界面:
@WebService
public interface DummyService {
@WebMethod String processMessage(Object obj);
}
Run Code Online (Sandbox Code Playgroud)
和一个简单的实现:
@WebService(endpointInterface = "com.dummyservice.DummyService")
public class DummyServiceImpl implements DummyService {
@Override
public String processMessage(Object obj) {
return "OK";
}
}
Run Code Online (Sandbox Code Playgroud)
我可以成功发布服务javax.xml.ws.Endpoint#publish(...)
,但是当我用简单的SOAP请求命中时,例如
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<derp/>
</soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)
我受到了SOAPFault的欢迎Cannot find dispatch method for {}derp
.
是否有可能创建一个通用/愚蠢的Web服务,它将使用JAX-WS确认所有内容?如果是这样,有人会指出我正确的方向吗?
编辑
感谢麦克道尔的小费,我能够做到这一点SOAPHandler
:
public class DummySOAPHandler implements SOAPHandler {
@Override
public boolean handleMessage(MessageContext context) {
return process((SOAPMessageContext) context);
}
@Override
public boolean handleFault(MessageContext context) {
return process((SOAPMessageContext) …
Run Code Online (Sandbox Code Playgroud) java ×4
maven ×2
sql ×2
.net ×1
ant ×1
archive ×1
assembly ×1
batch-file ×1
c# ×1
classloader ×1
database ×1
generics ×1
heroku ×1
iterator ×1
jar ×1
jax-ws ×1
lifecycle ×1
m2e ×1
m2eclipse ×1
nio2 ×1
oracle ×1
orchardcms ×1
plsql ×1
ruby ×1
ruby-2.0 ×1
soap ×1
sql-server ×1
t-sql ×1
types ×1
uri ×1
web-services ×1
windows ×1
x86 ×1
xerces ×1