小编Jus*_*ick的帖子

在Java/Maven中处理"Xerces hell"?

在我的办公室里,仅仅提到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等):

由Artifactory代理的xml-apis

例如,组织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的版本.因此,它无法执行冲突解决,并且两个 jars都将作为已解析的依赖项包含在内:

使用多个xml-apis解决了依赖关系

Classloader Hell …

java xerces classloader dependency-management maven

703
推荐指数
8
解决办法
12万
查看次数

Heroku上的"bin/rails:没有这样的文件或目录"w/Ruby 2&Rails 4

在遵循Michael Hartl的Ruby on Rails教程的Rails 4 Beta版本时,我的应用程序无法在Heroku上启动,但在本地运行良好.检查显示以下错误:bundle exec rails serverheroku 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)

ruby ruby-on-rails heroku ruby-2.0 ruby-on-rails-4

57
推荐指数
3
解决办法
3万
查看次数

关于在程序集中推送ebp和pop ebp指令的解释

我在汇编时使用了堆栈,但我不知道推送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)

x86 assembly

40
推荐指数
2
解决办法
7万
查看次数

可以在Oracle ALTER语句中使用子查询吗?

给定一个表名和一个列名,我试图动态地删除一个我不知道提前名称的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)

有没有办法用子查询做到这一点,正如我原先打算的那样?如果没有,任何人都可以建议一个更简洁的方法来做到这一点?

sql database oracle plsql

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

查找视图中使用的别名的真实列名?

假设我有一个视图,其中一些列名是别名,例如本例中的"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)

sql t-sql sql-server

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

使用生命周期映射包括m2e 1.0+的旧m2e插件?

我想启用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)

lifecycle m2eclipse m2e

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

在Java中安全地遍历原始迭代器?

我正在使用第三方库来返回原始迭代器,例如

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在下面提到的内容.

java generics types iterator

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

如何部署使用maven-antrun-plugin创建的zip文件?

我正在使用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)

ant maven maven-deploy-plugin maven-ant-tasks

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

是否存在嵌套归档的有效java.net.URI?

虽然可能是不明智的,但是通过使用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)

然而,getFileSystemnewFileSystem调用失败的IllegalArgumentException时候URI包含嵌套压缩文件,例如,当uri平等jar:jar:file:///Users/justingarrick/Desktop/test/my_war.war!/some_jar.jar!/(一的.jar一个内部的.war).

java.net.URI嵌套存档文件是否有有效的方案?

java uri jar archive nio2

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

我可以通过Lucene在Orchard中搜索/索引自定义数据源吗?

我目前正在开发一个网站,允许用户搜索自定义产品目录.我一直在环顾四周,并希望利用Orchard CMS来帮助我开发这个网站.我目前在定制的Orchard Modules和Skywalker博客系列中经历了Ron Petersons youtube 系列.

我觉得我的目标是可能的,但我正在寻找一些关于我的策略是否可以在Orchard框架内工作的验证.

这是我目前的情况:

  1. 我有一个指向SQL DB的默认Orchard配置(名为Product-Orchard)

  2. 我有一个指向另一个SQL DB(名为Products)的自定义DAL.

  3. 产品由您的典型信息(产品名称,描述,价格等)组成.

  4. 自定义DAL具有名为Product(具有要与之交互的存储库)的POCO模型,其属性为Name,Description,Price.

现在,基于我读到的有关创建Orchard模块的信息,似乎创建具有自定义内容的自定义模块的方法是:

  1. 通过代码生成工具创建模块(我们称之为ProductModule)

  2. 创建自定义内容部件(ProductPart)

  3. 创建自定义内容部件记录(ProductPartRecord)以充当部件的数据模型.

  4. 创建一个自定义ContentPartHandler(ProductPartHandler)来处理内容部分的持久性.

  5. 创建自定义驱动程序,该驱动程序是用于准备用于呈现UI的形状的条目.

  6. 可能创建一个与驱动程序交互的服务?

这是事情开始变得混乱的地方,我不确定这是否可能.我想要做的是创建一个由我的自定义DAL支持的自定义内容类型,而不是通过Product-Orchard DB中的ContentPartRecord存储数据,但仍然允许它由Lucene模块索引以允许用于搜索产品目录.

是否可以创建由不同数据源支持并仍然利用Lucene搜索功能的自定义ContentType和/或ContentPart?

在高级术语中,我想要一个Product ContentType,其中ContentItems实际存储在我的辅助数据库中,而不是Orchard数据库中(并且仍然希望能够通过Projections利用Lucene搜索).

.net c# orchardcms

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

按批量文件名前缀的顺序读取目录中的文件?

我在一个目录中有许多SQL脚本,前缀是数字,例如

在此输入图像描述

目前,我可以使用此脚本循环遍历它们:

@ECHO OFF
FOR /r . %%F IN (*.sql) DO (
    ECHO File:"%%F"
)
Run Code Online (Sandbox Code Playgroud)

但是,由于Windows读取目录中文件的方式,在2之前读取10和11,等等:

在此输入图像描述

如何按照前缀的顺序遍历目录中的每个文件?

windows batch-file

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

我可以创建一个通用Web服务/调度方法来响应使用JAX-WS的所有请求吗?

我正在尝试创建一个通用的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 soap web-services jax-ws

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