使用cloudera-manager-api时,org.apache.cxf.jaxrs.client.AbstractClient.setupOutInterceptorChain中的NullPointerException [重复]

问题描述 投票:8回答:1

这个问题在这里已有答案:

我正在通过cloudera-manager-api获得集群。

我正在使用Maven shade-plugin。

another question relating to null pointer exceptions,但这并不能解决我的特殊问题。它看起来像一个依赖问题,因为如果我在我的IDE中运行该应用程序它工作正常。

当我运行自打包的jar时,它会失败,我可能会缺少什么依赖?

来源如下

    String host = HOST_PREFIX + args[0];
    String command = args[1];

    RootResourceV10 apiRoot = new ClouderaManagerClientBuilder()
            .withHost(host).withPort(7180)
            .withUsernamePassword(ADMIN, ADMIN).build().getRootV10();

    if (apiRoot == null) {
        System.exit(0);
    }

    ClustersResourceV10 clusterResource = apiRoot.getClustersResource();


    try {

        if (command.equals(START)) {

            System.out.println("starting..");

            ApiCommand cmd = apiRoot.getClustersResource().startCommand(
                    "cluster"
                    );
            while (cmd.isActive()) {
                cmd = apiRoot.getCommandsResource()
                        .readCommand(cmd.getId());
            }
        } else {
            System.out.println("stopping..");

            ApiCommand cmdstop = apiRoot.getClustersResource().stopCommand(
                    "cluster"
                    );
            while (cmdstop.isActive()) {
                cmdstop = apiRoot.getCommandsResource().readCommand(
                        cmdstop.getId());
            }

        }
    } catch (NullPointerException e) {
        e.printStackTrace();
    }

}

错误消息在{{

java.lang.NullPointerException
        at org.apache.cxf.jaxrs.client.AbstractClient.setupOutInterceptorChain(AbstractClient.java:850)
        at org.apache.cxf.jaxrs.client.AbstractClient.createMessage(AbstractClient.java:900)
        at org.apache.cxf.jaxrs.client.ClientProxyImpl.doChainedInvocation(ClientProxyImpl.java:522)
        at org.apache.cxf.jaxrs.client.ClientProxyImpl.invoke(ClientProxyImpl.java:206)
        at com.sun.proxy.$Proxy23.startCommand(Unknown Source)
        at com.worksap.company.cloudera.cluster.manage.ClusterManager.main(ClusterManager.java:48)

pom.xml在下面

<?xml version="1.0" encoding="UTF-8"?>
<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>jp.co.ltd</groupId>
    <artifactId>cluster-manager</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <repositories>
        <repository>
            <id>cdh.repo</id>
            <url>https://repository.cloudera.com/artifactory/cloudera-repos</url>
            <name>Cloudera Repository</name>
        </repository>
    </repositories>

    <properties>
        <cxf.version>2.7.5</cxf.version>
        <guava.version>14.0</guava.version>
        <jackson2.version>2.1.0</jackson2.version>
        <joda.version>2.1</joda.version>
        <junit.version>4.11</junit.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <test.redirectToFile>true</test.redirectToFile>
        <privateClassPath>com.cloudera.api.shaded</privateClassPath>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.2.0</version>
        </dependency>
        <dependency>
            <groupId>com.cloudera.api</groupId>
            <artifactId>cloudera-manager-api</artifactId>
            <version>5.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>${cxf.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxrs</artifactId>
            <version>${cxf.version}</version>
        </dependency>
        <dependency>    
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.8</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.1</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <minimizeJar>false</minimizeJar>
                            <createDependencyReducedPom>false</createDependencyReducedPom>
                            <transformers>
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                    <resource>META-INF/spring.handlers</resource>
                                </transformer>
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                    <resource>META-INF/spring.schemas</resource>
                                </transformer>
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>com.worksap.company.sample.spark.batch.SparkSample</mainClass>
                                </transformer>
                            </transformers>
                            <shadedArtifactAttached>true</shadedArtifactAttached>
                            <shadedClassifierName>jar-with-dependencies</shadedClassifierName>
                            <configuration>
                                <filters>
                                    <filter>
                                        <artifact>*:*</artifact>
                                        <excludes>
                                            <exclude>META-INF/*.SF</exclude>
                                            <exclude>META-INF/*.DSA</exclude>
                                            <exclude>META-INF/*.RSA</exclude>
                                        </excludes>
                                    </filter>
                                </filters>
                                <!-- Additional configuration. -->
                            </configuration>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.5.2</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <compilerArguments>
                        <extdirs>lib</extdirs>
                    </compilerArguments>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
java maven cxf cloudera-manager
1个回答
14
投票

我遇到了同样的问题并找到了这个解决方案:

https://cxf.apache.org/docs/bundling-cxf-into-single-jar-with-maven-shade-plugin.html

CXF使用bus-extensions.txt文件来连接模块,它们必须包含在jar中。所以将它添加到变换器部分:

<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
  <resource>META-INF/cxf/bus-extensions.txt</resource>
</transformer>
© www.soinside.com 2019 - 2024. All rights reserved.