Pergunta

Eu preciso consumir um serviço da web no meu projeto.Eu uso o NetBeans, então eu clicou com o botão direito em meu projeto e tentou adicionar um novo "Cliente de Serviço da Web".A última vez que eu chequei, este foi o caminho para se criar um cliente de serviço da web.Mas isso resultou em um AssertionError, dizendo:

o java.lang.AssertionError:org.xml.sax.SAXParseException;systemId:jar:file:/path/to/glassfish/modules/jaxb-osgi.jar!/com/sun/tools/xjc/reader/xmlschema/bindinfo/binding.xsd;lineNumber:52;columnNumber:88;schema_reference:Falha ao ler documento de esquema 'xjc.xsd', porque 'arquivo' de acesso não é permitida devido às restrições definidas pelos accessExternalSchema propriedade.

O padrão da plataforma Java, o NetBeans foi JDK8 (Oracle versão oficial), então quando eu mudei meu netbeans.conf arquivo e fez JDK7 (da Oracle, bem como padrão, tudo funcionou muito bem.Então, eu acho que o problema é com JDK8.Aqui é o meu java -version saída:

java, a versão 1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)

Por agora, eu estou mantendo JDK7 como meu padrão da plataforma Java.Se há uma maneira de fazer JDK8 trabalho, por favor, compartilhe.

Foi útil?

Solução

Bem, eu encontrei a solução.(com base no http://docs.oracle.com/javase/7/docs/api/javax/xml/XMLConstants.html#ACCESS_EXTERNAL_SCHEMA)

Crie um arquivo chamado jaxp.properties (se ele não existir), sob /path/to/jdk1.8.0/jre/lib e, em seguida, escreva essa linha:

javax.xml.accessExternalSchema = all

Isso é tudo.Desfrute do JDK 8.

Outras dicas

Não uma resposta, mas mais como uma referência.

Se você estiver usando o jaxws Maven plugin e você receber a mesma mensagem de erro, adicione o mencionado imóvel para a configuração do plugin:

...
<plugin>
  <groupId>org.jvnet.jax-ws-commons</groupId>
  <artifactId>jaxws-maven-plugin</artifactId>
  <version>2.3</version>
  <configuration>
    <!-- Needed with JAXP 1.5 -->
    <vmArgs>
        <vmArg>-Djavax.xml.accessExternalSchema=all</vmArg>
    </vmArgs>
  </configuration>
</plugin>

Eu corro formiga constrói dentro do Eclipse IDE (4.4, Luna, no Windows 7 x64).Em vez de modificar o JRE instalada lib ou qualquer formiga scripts (tenho vários projetos que incluem XJC em suas compilações), eu prefiro mudar o Eclipse Configurações "Ferramentas Externas Configurações" e adicione o seguinte para a VM argumentos para a Formiga configuração de compilação:

-Djavax.xml.accessExternalSchema=all

A seguir funciona para wsimport 2.2.9 incluído no jdk 1.8.0_66:

wsimport -J-Djavax.xml.accessExternalSchema=all ....

No meu caso, acrescentando:

javax.xml.accessExternalSchema = all

para jaxp.propriedades não funcionou, o que eu tenho a acrescentar:

javax.xml.accessExternalDTD = all

Meu ambiente é linux mint 17 e java 8 oracle.Vou colocá-lo lá como uma resposta para as pessoas com o mesmo problema.

Eu testei isso para a versão 2.4 do artefato org.codehaus.mojo e que trabalhou ~

<plugins>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>jaxws-maven-plugin</artifactId>
        <version>2.4.1</version>
        <executions>
            <execution>

                <goals>
                    <goal>wsimport</goal>
                </goals>
                <configuration>
                    <wsdlDirectory>path/to/dir/wsdl</wsdlDirectory>
                </configuration>
                <id>wsimport-web-service</id>
                <phase>generate-sources</phase>
            </execution>
        </executions>
        <dependencies>
            <dependency>
                <groupId>javax.xml</groupId>
                <artifactId>webservices-api</artifactId>
                <version>${webservices-api-version}</version>
            </dependency>
        </dependencies>
        <configuration>
            <vmArgs>
                <vmArg>-Djavax.xml.accessExternalSchema=all</vmArg>
            </vmArgs>
            <sourceDestDir>generated-sources/jaxws-wsimport</sourceDestDir>
            <xnocompile>true</xnocompile>
            <verbose>true</verbose>
            <extension>true</extension>
            <sei>/</sei>
        </configuration>
    </plugin>
</plugins>

Aqui está uma dica dica para gradle os utilizadores sem direitos de administrador:adicione esta linha ao seu jaxb-tarefa:

System.setProperty('javax.xml.accessExternalSchema', 'all')

ele será parecido com este:

jaxb {
    System.setProperty('javax.xml.accessExternalSchema', 'all')
    xsdDir = "${project.name}/xsd"
    xjc {
        taskClassname = "com.sun.tools.xjc.XJCTask"
        args = ["-npa", "-no-header"]
    }
}

Se você está recebendo este problema ao converter o wsdl para jave com o cxf-codegen-plugin, e , em seguida, você pode resolvê-lo a configurar o plugin para o garfo e fornecer adicionais "-Djavax.xml.accessExternalSchema=todos os" JVM opção.

        <plugin>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-codegen-plugin</artifactId>
            <version>${cxf.version}</version>
            <executions>
                <execution>
                    <id>generate-sources</id>
                    <phase>generate-sources</phase>
                    <configuration>
                        <fork>always</fork>
                        <additionalJvmArgs>
                            -Djavax.xml.accessExternalSchema=all
                        </additionalJvmArgs>

Eu também estava recebendo o mesmo tipo de erro em Eclipse durante o teste de um webservice programa no glassfish web 4.0 server:java.lang.AssertionError: org.xml.sax.SAXParseException; systemId: bundle://158.0:1/com/sun/tools/xjc/reader/xmlschema/bindinfo/binding.xsd; lineNumber: 52; columnNumber: 88; schema_reference: Failed to read schema document 'xjc.xsd', because 'bundle' access is not allowed due to restriction set by the accessExternalSchema property.

Eu adicionei javax.xml.accessExternalSchema = All no jaxp.properties, mas não funciona para mim.

No entanto, eu encontrei uma solução aqui abaixo o que funciona para mim:Para o GlassFish Server, eu preciso modificar a domain.xml do GlassFish caminho :<path>/glassfish/domains/domain1 ou domain2/config/domain.xml) e adicionar, <jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options>sob o <java-config> marca

....

<java-config> ... <jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options> </java-config> ...e, em seguida, reinicie o GlassFish server

Quando utilizar o Maven com o IntelliJ IDE você pode adicionar -Djavax.xml.accessExternalSchema=all para o Maven definição em JVM Opções para O Maven Ferramentas de construção de Corredor de configuração

Habilitando o Acesso ao Esquema Externo

Você precisa ativar o IDE e o GlassFish Server para acesso externo esquema para analisar o arquivo WSDL do serviço da web.Para habilitar o acesso, você precisa modificar os arquivos de configuração do IDE e o GlassFish Server.Para mais detalhes, consulte o FAQ Como habilitar a análise de WSDL com um esquema externo?Configurando o IDE

Para gerar um cliente de serviço da web no IDE a partir de um serviço da web ou arquivo WSDL que você precisa para modificar o IDE (arquivo de configuração do netbeans.conf) para adicionar a seguinte opção para netbeans_default_options.

-J-Djavax.xml.accessExternalSchema=all

Para mais informações sobre localização e modificar o netbeans.conf arquivo de configuração, consulte o Netbeans Conf FAQ.Configurando o GlassFish Server

Se você estiver implantando o GlassFish Server, você precisa modificar o arquivo de configuração do GlassFish Server (domain.xml) para habilitar o servidor para acesso externo esquemas para analisar o arquivo wsdl e gerar o cliente de teste.Para permitir o acesso a esquemas externos, abra o arquivo de configuração do GlassFish (GLASSFISH_INSTALL/glassfish/domains/domain1/config/domain.xml) e adicione o seguinte JVM elemento de opção (em negrito).Você precisará reiniciar o servidor para que a alteração tenha efeito.

</java-config>
  ...
  <jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options>
</java-config>

Para quem usa o ANT tarefa wsimport, uma maneira de passar a opção, como sugerido por @CMFly e especificado no documentação é o seguinte:

<wsimport
   <!-- ... -->
   fork="true"
  >
  <jvmarg value="-Djavax.xml.accessExternalSchema=all"/>
</wsimport>

Eu usei ele com um regular maven projeto, e ficou resolvido com este plugin dependência de configuração para executar o xjc plugin:

     <plugin>
        <!-- Needed to run the plugin xjc en Java 8 or superior -->
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>properties-maven-plugin</artifactId>
        <version>1.0-alpha-2</version>
        <executions>
            <execution>
                <id>set-additional-system-properties</id>
                <goals>
                    <goal>set-system-properties</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <properties>
                <property>
                    <name>javax.xml.accessExternalSchema</name>
                    <value>all</value>
                </property>
                <property>
                    <name>javax.xml.accessExternalDTD</name>
                    <value>all</value>
                </property>
            </properties>
        </configuration>
    </plugin>

Isso funciona em jdk1.8.0_65

wsimport -J-Djavax.xml.accessExternalSchema=all -keep -verbose https://your webservice url?wsdl

Já está corrigido na versão 2.5 (lançado em jul/17). https://github.com/mojohaus/jaxws-maven-plugin/issues/8.

Para o 2.4.x versões, há uma solução (como foi descrito no https://github.com/mojohaus/jaxws-maven-plugin/issues/4):

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>jaxws-maven-plugin</artifactId>
        <version>2.4.1</version>
        <dependencies>
            <dependency>
                <groupId>com.sun.xml.ws</groupId>
                <artifactId>jaxws-tools</artifactId>
                <version>2.2.10</version>
            </dependency>
        </dependencies>
    </plugin>

Uma outra solução para o endereço: wiki.netbeans.org

O Cliente de Serviço da Web assistente no IDE analisa o arquivo WSDL quando a geração de um cliente de serviço da web a partir de um serviço da web ou arquivo WSDL.Você precisa modificar o IDE (arquivo de configuração do netbeans.conf) para adicionar a seguinte opção para o netbeans_default_options.Você precisará reiniciar o IDE para que a alteração tenha efeito.

-J-Djavax.xml.accessExternalSchema=all

Quando implementar o GlassFish você precisa habilitar o acesso externo esquema para gerar um cliente de teste para um serviço da web.Para habilitar o acesso, você precisa modificar o arquivo de configuração do GlassFish Server (GLASSFISH_INSTALL/glassfish/domains/domain1/config/domain.xml) e adicione o seguinte JVM elemento de opção.Você precisará reiniciar o servidor para que a alteração tenha efeito.

</java-config>
  ...
  <jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options>
</java-config>

Se você estiver usando o ant você pode adicionar um jvmarg para o java chama:

<jvmarg value="-Djavax.xml.accessExternalSchema=all" />

Um muito simples e portátil solução seria, colocar a seguinte linha de código em algum lugar em uma parte crucial de seu código, uma parte do que você tem certeza de que vai ser executada (por exemplo, direito no método main):

System.setProperty("javax.xml.accessExternalDTD", "all");

Isso define o sistema necessário programaticamente a propriedade, sem ter que fazer complicado maven pom.xml alterações (o que, por algum motivo, não funcionou para mim).

Eu já tentei só que se você usar SoapUI (5.4.x) e usar Apache CXF ferramenta para gerar código java, coloque javax.xml.accessExternalSchema = all no YOUR_JDK/jre/lib/jaxp.properties o arquivo também funciona.

Outra alternativa é atualizar wsimport.sh shell script, adicionando o seguinte:

O wsimport.sh está localizado nesse diretório:

jaxws-ri.2.2.28/bin

exec "$JAVA" $WSIMPORT_OPTS -Djavax.xml.accessExternalSchema=all -jar "$JAXWS_HOME/lib/jaxws-tools.jar" "$@"

Outra referência:Se você estiver usando o maven-jaxb2-plugin, anteriores à versão 0.9.0, você pode usar a solução alternativa descrita sobre esta questão, em que este comportamento afetado o plugin.

O NetBeans atualizar seu tutorial para JDK8 e esse Problema:

Introdução com JAX-WS Web Services -> Habilitando o Acesso ao Esquema Externo

Crie um arquivo chamado jaxp.properties (se ele não existir) em caminho para o seu "JDK versão/jre/lib" e, em seguida, adicione esta linha:

javax.xml.accessExternalSchema = all
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top