Bom dia galera.
Estou com um pequeno problema…
Estou tentando criar um arquivo.log …
bom isso eu consigo, o problema que só funciona quando o projeto tem um método main.
No caso estou tentando fazer com que meu Web Service tenha um log e o mesmo não possui um método main e não cria o arquivo de log…
Se eu colocar um main dentro de qualquer classe o log funciona…
Qualquer dica é bem vinda…
Att, rafael…
Poste o código do que você já fez para que possamos entender o problema e ajudá-lo.
Obrigado por responder.
Segue o xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"
debug="false">
<!-- ================================= -->
<!-- Preserve messages in a local file -->
<!-- ================================= -->
<!-- A time/date based rolling appender -->
<appender name="FILE" class="org.apache.log4j.FileAppender">
<param name="File" value="logs/loggin.log" />
<param name="Append" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<!-- The default pattern: Date Priority [Category] Message\n -->
<param name="ConversionPattern" value="%d %-5p [%c] [%t] %m%n" />
<!-- The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n
<param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/> -->
</layout>
</appender>
<!-- Append messages to the console -->
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<!-- <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/> -->
<param name="Target" value="System.out" />
<param name="Threshold" value="INFO" />
<layout class="org.apache.log4j.PatternLayout">
<!-- The default pattern: Date Priority [Category] Message\n -->
<param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] [%t] %m%n" />
</layout>
</appender>
<!-- Limit the org.apache category to INFO as its DEBUG is verbose -->
<category name="com.webservice">
<priority value="DEBUG" />
</category>
<!-- Limit org.jgroups category to INFO -->
<category name="org.jgroups">
<priority value="INFO" />
</category>
<root>
<priority value="INFO" />
<appender-ref ref="FILE" />
<appender-ref ref="CONSOLE" />
</root>
</log4j:configuration>
Classe principal do webservice:
@WebService(endpointInterface = "com.webservice.ISave", serviceName = "Save")
public class Save implements ISave {
private final Logger logger = Logger.getLogger(this.getClass());
private connection connection = new connection();
private SaveFile saveFile = new SaveFile();
private SaveDTO saveDto = new SaveDTO ();
@WebMethod
public String[] saveFile(List<String[]> file) {
String[] returnRow = null;
for (String[] row : file) {
logger.info("Enviando o pacote: "+ row +" para a base de dados!");
statisticDto = saveFile.loadFile(row);
if (connection.saveDB(saveDto).equals(true)) {
returnRow = row;
}
}
return returnRow;
}
}
E o import? A classe Logger da API do Java SE também tem o método info.
IMPORTS:
import java.util.List;
import javax.jws.WebMethod;
import javax.jws.WebService;
import org.apache.log4j.Logger;
IMPORTS:
import java.util.List;
import javax.jws.WebMethod;
import javax.jws.WebService;
import org.apache.log4j.Logger;
[quote=rafael.kbeca]IMPORTS:
[code]
import java.util.List;
import javax.jws.WebMethod;
import javax.jws.WebService;
import org.apache.log4j.Logger;
[/code][/quote]
Está correto.
Não há nenhuma mensagem de erro no servidor? Tente gerar o arquivo em outro diretório, que o usuário que incia o servidor tenha permissão e veja o que acontece.
o que pode estar acontecendo é que voce deveria chamar o metodo de “log” em determinadas funções de seu webservice para ele “adicionar ao log” determinada ação antes que ele execulte, caso contrario fica como um metodo dependente do metodo main.
Como faço para chamar o metodo sem usar o main?
E tem outro ponto que talvez seja importante.
Eu estava executando o webservice externamente, peguei ele e fui rodar no eclipse pra facilitar e retornou o seguinte erro:
Caused by: java.io.IOException: Not Found
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:2071)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:2022)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1947)
at org.apache.cxf.io.CacheAndWriteOutputStream.postClose(CacheAndWriteOutputStream.java:47)
at org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:188)
at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66)
at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:632)
at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
... 9 more
javax.xml.ws.soap.SOAPFaultException: Could not send Message.
fico no aguardo… abraço!
o metodo main faz a chamada inicial.
o webservice vai utlizar metodos externos.
vc tem q liberar para metodos externos aumentarem o log e não apenas o metodo main.
nebster obrigado por responder…
Mas tu tem um link ou uma dica de como fazer isso?
Abraço!
cara,
eh simples ate demais…
vou colocar tudo da maneira mais simples o processo
<recebeu solicitação de importar dados>
<adiciona uma linha dentro do log com a futura alteração>
<faz a alteração>
<retorna uma confirmação>
simples assim.
HUm…
Desta maneira se eu entendi a modificação vai ficar dentro do código (classe java). tipo abrir o arquivo inserir a linha salvar e fechar…
eu só sei e prefiro fazer em xml pra ficar externo facilitando a configuração…
E o erro IOException not found é esse o erro?
pq eu tiro o xml e o erro continua…
IOException not found = ExcessãoIO não encontrada
verifique certinho o codigo por completo e verifique depois a conexão do xml com a classe.
Não tem conexão xml com a classe… o log4j pega automático…
Sobre o erro ja verifiquei…
gostaria de saber se alguém ja teve algum erro parecido para dar uma luz…
Abraço!
cara, não precisa de main pra rolar o log… se vc está com o arquivo de configuração do log4j ok então é só confirmar se em category vc referencia o package correto da classe…
eu geralmente faço assim no arquivo properties do log4j
log4j.category.br.com.controller=ERROR
e na classe:
protected static Logger logger = Logger.getLogger(MainController.class);
clonex8 obrigado por responder…
Não deu tbm…
O engraçado que se eu criar um main em qualquer classe do webservice o log funciona…
e só ta funcionando externamente no eclipse fica dando aquele exception…
Abraço!
[quote=rafael.kbeca]clonex8 obrigado por responder…
Não deu tbm…
O engraçado que se eu criar um main em qualquer classe do webservice o log funciona…
e só ta funcionando externamente no eclipse fica dando aquele exception…
Abraço!
[/quote]
saquei… putz, complicado…
Outra, eu tava olhando a exception lançada e se não me engano a classe HttpConduit que lança esta IOExpection… da uma confirmada pra ver se é isto mesmo…
Este erro é quando o webserver diz que o serviço não foi implantado no local… Dá uma olhada se a porta definida no WSDL aponta pra um local válido e que o serviço está implantado… verifica também a porta HTTP do serviço SOAP, pega a url e add ?WSDL nela… ve se retorna um WSDL válido (o xml)
O exception é lançada pela classe HttpConduit mas a ultima classe a entrar é a PhaseInterceptorChain
Alguma dica?
vc chegou a confirmar se o wsdl é válido? o webservice está lançando IO e seu log parace que não loga… não seguei a olhar direito, pq to enroladão aqui… mas seu log tá escrevendo ERROR??? confirma ai primeiro o wsdl se está válido e pega pra logar error…