Preciso consumir um serviço da web no meu projeto. Como uso o NetBeans, cliquei com o botão direito do mouse no meu projeto e tentei adicionar um novo "Web Service Client". Na última vez que verifiquei, era assim que se criava um cliente de serviço da web. Mas resultou em um AssertionError, dizendo:
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 o documento do esquema ' xjc.xsd ', porque o acesso ao 'arquivo' não é permitido devido a restrições definidas pela propriedade accessExternalSchema .
A plataforma Java padrão para o NetBeans era o JDK8 (versão oficial da Oracle); portanto, quando mudei meu arquivo netbeans.conf e criei o JDK7 (também da Oracle) como padrão, tudo funcionou bem. Então, acho que o problema está no JDK8. Aqui está a minha java -version
saída:
versão java "1.8.0"
Java (TM) SE Runtime Environment (versão 1.8.0-b132)
VM do servidor Java HotSpot (TM) de 64 bits (versão 25.0-b70, modo misto)
Por enquanto, estou mantendo o JDK7 como minha plataforma Java padrão. Se houver uma maneira de fazer o JDK8 funcionar, compartilhe.
Respostas:
Bem, eu encontrei a solução. (com base em http://docs.oracle.com/javase/7/docs/api/javax/xml/XMLConstants.html#ACCESS_EXTERNAL_SCHEMA )
Crie um arquivo chamado
jaxp.properties
(se não existir) abaixo/path/to/jdk1.8.0/jre/lib
e escreva esta linha nele:Isso é tudo. Aproveite o JDK 8.
fonte
/path/to/jdk1.8.0/lib
umjre
diretório não posterior .Não é uma resposta real, mas mais como uma referência.
Se você estiver usando o plugin jaxws Maven e receber a mesma mensagem de erro, adicione a propriedade mencionada à configuração do plugin:
fonte
accessExternalSchema=all
valor é definido por padrão se você usar versões posteriores (como 0.12.3) doorg.jvnet.jaxb2.maven2:maven-jaxb2-plugin
plug - in.Executo construções de formigas no IDE Eclipse (4.4, Luna, no Windows 7 x64). Em vez de modificar a lib JRE instalada ou qualquer script ant (eu tenho vários projetos que incluem XJC em suas construções), prefiro alterar as Configurações do Eclipse "External Tools Configurations" e adicionar o seguinte aos argumentos da VM para a configuração de construção Ant:
fonte
O seguinte funciona para o wsimport 2.2.9 incluído no jdk 1.8.0_66:
fonte
wsimport
diretamente.No meu caso, adicionando:
para o jaxp.properties não funcionou, devo adicionar:
Meu ambiente é linux mint 17 e java 8 oracle. Vou colocá-lo lá como resposta para pessoas com o mesmo problema.
fonte
Eu testei isso na versão 2.4 do artefato org.codehaus.mojo e funcionou ~
fonte
-Djavax.xml.accessExternalSchema=all
que está configurado na sua declaração de plug-in. Isso é discutido no Netbeans Bug 244891Aqui está uma dica Dica para usuários graduados sem direitos de administrador: adicione esta linha à sua tarefa jaxb:
Isso parecerá assim:
fonte
Se você estiver tendo esse problema ao converter wsdl em jave com o plugin cxf-codegen-plug-in , poderá resolvê-lo configurando o plug-in para fork e forneça a opção JVM "-Djavax.xml.accessExternalSchema = all".
fonte
Eu também estava recebendo um tipo semelhante de erro no Eclipse durante o teste de um programa de serviço da web no servidor da web glassfish 4.0:
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
emjaxp.properties
, mas o trabalho doesnot para mim.No entanto, encontrei aqui uma solução abaixo, que funciona para mim: Para o GlassFish Server, preciso modificar
domain.xml
o GlassFish, path:<path>/glassfish/domains/domain1
ordomain2/config/domain.xml
) e adicionar,<jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options>
sob a<java-config>
tag<java-config> ... <jvm-options>-Djavax.xml.accessExternalSchema=all</jvm-options> </java-config>
... e, em seguida, reinicie o servidor GlassFishfonte
Habilitando o acesso ao esquema externo
Você precisa habilitar o IDE e o GlassFish Server para acessar o esquema externo 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 do GlassFish Server. Para obter mais detalhes, consulte o FAQ. Como habilitar a análise do 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, é necessário modificar o arquivo de configuração do IDE (netbeans.conf) para adicionar a seguinte opção a netbeans_default_options.
Para obter mais informações sobre como localizar e modificar o arquivo de configuração netbeans.conf, consulte Perguntas frequentes sobre o Netbeans Conf. Configurando o servidor GlassFish
Se você estiver implantando no GlassFish Server, precisará modificar o arquivo de configuração do GlassFish Server (domain.xml) para permitir que o servidor acesse esquemas externos para analisar o arquivo wsdl e gerar o cliente de teste. Para ativar 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 elemento de opção da JVM (em negrito). Você precisará reiniciar o servidor para que a alteração entre em vigor.
fonte
Ao usar o Maven com o IntelliJ IDE, você pode adicionar
-Djavax.xml.accessExternalSchema=all
à configuração do Maven em Opções da JVM para configuração do Maven Build Tools Runnerfonte
Isso funciona no jdk1.8.0_65
fonte
Para aqueles que usam a tarefa ANT
wsimport
, uma maneira de passar a opção sugerida por @CMFly e especificada na documentação é a seguinte:fonte
Agora está corrigido na versão 2.5 (lançada em jul / 17). https://github.com/mojohaus/jaxws-maven-plugin/issues/8 .
Para as versões 2.4.x, há uma solução alternativa (conforme descrito em https://github.com/mojohaus/jaxws-maven-plugin/issues/4 ):
fonte
Usei-o com um projeto maven regular e resolvi-o com esta configuração de dependência de plug-in para executar o
xjc plugin
:fonte
jaxws-maven-plugin
para o 2.5 conforme especificado em outras respostas mojohaus.org/jaxws-maven-plugin/usage.html Mas ainda assim, a melhor resposta no meu caso, obrigado!Crie um arquivo chamado
jaxp.properties
(se não existir) no caminho para sua "versão do JDK / jre / lib" e adicione esta linha nele:fonte
Outra solução para resolver: wiki.netbeans.org
O assistente Web Service Client no IDE analisa o arquivo WSDL ao gerar um cliente de serviço da Web a partir de um serviço da Web ou arquivo WSDL. Você precisa modificar o arquivo de configuração do IDE (netbeans.conf) para adicionar a seguinte opção ao netbeans_default_options. Você precisará reiniciar o IDE para que a alteração entre em vigor.
Ao implantar no GlassFish, você precisa habilitar o acesso ao esquema externo para gerar um cliente de teste para um serviço da web. Para ativar o acesso, você precisa modificar o arquivo de configuração do GlassFish Server (GLASSFISH_INSTALL / glassfish / domains / domain1 / config / domain.xml) e adicionar o seguinte elemento de opção da JVM. Você precisará reiniciar o servidor para que a alteração entre em vigor.
fonte
Se você estiver usando ant, poderá adicionar um jvmarg às suas chamadas java:
fonte
Uma solução portátil muito simples seria colocar a seguinte linha de código em algum lugar de uma parte crucial do seu código, parte da qual você tem certeza de que será executado (por exemplo, diretamente no método principal):
Isso define a propriedade do sistema necessária programaticamente, sem ter que fazer alterações complicadas no maven pom.xml (que, por algum motivo, não funcionaram para mim).
fonte
Eu apenas tentei que se você usar
SoapUI (5.4.x)
e usar aApache CXF
ferramenta para gerar código java, colocarjavax.xml.accessExternalSchema = all
noYOUR_JDK/jre/lib/jaxp.properties
arquivo também funciona.fonte
Outra alternativa é atualizar o shell script wsimport.sh adicionando o seguinte:
O wsimport.sh está localizado neste diretório:
jaxws-ri.2.2.28 / bin
exec "$ JAVA" $ WSIMPORT_OPTS -Djavax.xml.accessExternalSchema = all -jar "$ JAXWS_HOME / lib / jaxws-tools.jar" "$ @"
fonte
Outra referência: se você estiver usando o
maven-jaxb2-plugin
, anterior à versão 0.9.0, poderá usar a solução alternativa descrita neste problema , na qual esse comportamento afetou o plug-in.fonte
O NetBeans atualiza seu tutorial para o JDK8 e este problema:
Introdução aos Serviços da Web JAX-WS -> Ativando o acesso ao esquema externo
fonte