cxf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Daniel Kulp (JIRA)" <j...@apache.org>
Subject [jira] Resolved: (CXF-1589) Exception is thrown only the first time an error occur while trying to publish a webservice with HTTP transport
Date Mon, 19 May 2008 21:11:55 GMT

     [ https://issues.apache.org/jira/browse/CXF-1589?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Daniel Kulp resolved CXF-1589.
------------------------------

       Resolution: Fixed
    Fix Version/s: 2.1.1

> Exception is thrown only the first time an error occur while trying to publish a webservice
with HTTP transport
> ---------------------------------------------------------------------------------------------------------------
>
>                 Key: CXF-1589
>                 URL: https://issues.apache.org/jira/browse/CXF-1589
>             Project: CXF
>          Issue Type: Bug
>          Components: Transports
>    Affects Versions: 2.0.6
>            Reporter: Kjell Winblad
>            Assignee: Daniel Kulp
>             Fix For: 2.1.1, 2.0.7
>
>   Original Estimate: 0.33h
>  Remaining Estimate: 0.33h
>
> When a webservice with HTTP defined as transport is published with the following code
and the service is already started at the defined publish address an exception is thrown which
is a correct behaviour. The problem is that if the same publish code is executed again no
error is thrown. 
> try{
>    Endpoint end = Endpoint.create(impl);
>    endpoint = (EndpointImpl) end;
>    endpoint.setWsdlLocation(wsdlfile);
>    endpoint.publish();
> }catch(WebServiceException e){
>    System.out.println(e);
>    
>    //The following error message will be printed if the address is already in use:
>    
>    //javax.xml.ws.WebServiceException: org.apache.cxf.interceptor.Fault: START_UP_SERVER_FAILED_MSG
>    //org.apache.cxf.interceptor.Fault: START_UP_SERVER_FAILED_MSG
>    //java.net.BindException: Address already in use
> }
> try{
>    Endpoint end = Endpoint.create(impl);
>    endpoint = (EndpointImpl) end;
>    endpoint.setWsdlLocation(wsdlfile);
>    endpoint.publish();
> }catch(WebServiceException e){
>    System.out.println(e);
>    
>    //No exception is thrown this time even if the publish address is already in use
> }
> The problem seems to be in the method org.apache.cxf.transport.http_jetty.JettyHTTPServerEngine#addServant.
The method has the following structure:
>     public synchronized void addServant(URL url, JettyHTTPHandler handler) {
>         if (server == null) {
>             ....  code to start server
>             } catch (Exception e) {
>                 LOG.log(Level.SEVERE, "START_UP_SERVER_FAILED_MSG", new Object[] {e.getMessage()});
>                 //problem starting server
>                 try {                    
>                     server.stop();
>                     server.destroy();
>                 } catch (Exception ex) {
>                     //ignore - probably wasn't fully started anyway
>                 } // Add the following to fix the problem
>                   //finally{
>                   //  server = null;
>                   //}  
>                 throw new Fault(new Message("START_UP_SERVER_FAILED_MSG", LOG, e.getMessage()),
e);
>             }
>         }
> The problem is that server field is not null the second time publish is called. Adding
the expression "server = null;" in a finally block for the server.stop() and server.destroy()
try seems to fix the problem.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message