1 |
26600
|
sandro.lab
|
package eu.dnetlib.soap.cxf;
|
2 |
|
|
|
3 |
|
|
import java.net.URI;
|
4 |
|
|
import java.net.URISyntaxException;
|
5 |
|
|
|
6 |
|
|
import javax.annotation.PostConstruct;
|
7 |
|
|
|
8 |
|
|
import org.apache.commons.logging.Log;
|
9 |
|
|
import org.apache.commons.logging.LogFactory;
|
10 |
|
|
import org.apache.cxf.endpoint.Endpoint;
|
11 |
|
|
import org.springframework.beans.factory.annotation.Required;
|
12 |
|
|
|
13 |
|
|
/**
|
14 |
|
|
* CxfEndpointReferenceBuilder is not able to create correct endpoint addresses outside a http request context. This means that service
|
15 |
|
|
* initialization code cannot obtain the service address and thus cannot register himself.
|
16 |
|
|
*
|
17 |
|
|
* This subclass allows putting a local address (ip/dns + port) to be used when the runtime servlet context is not available.
|
18 |
|
|
*
|
19 |
|
|
* TODO: automated tomcat port detection, trough org.apache.catalina.ServerFactory.getServer().getServices() TODO: automated jetty port
|
20 |
|
|
* detection
|
21 |
|
|
*
|
22 |
|
|
*
|
23 |
|
|
* @author marko
|
24 |
|
|
*
|
25 |
|
|
*/
|
26 |
|
|
public class StandaloneCxfEndpointReferenceBuilder extends CxfEndpointReferenceBuilder {
|
27 |
|
|
|
28 |
|
|
private static final Log log = LogFactory.getLog(StandaloneCxfEndpointReferenceBuilder.class); // NOPMD by marko on 11/24/08 5:02 PM
|
29 |
|
|
|
30 |
|
|
/**
|
31 |
|
|
* base url where all services are exported.
|
32 |
|
|
*/
|
33 |
|
|
private String baseAddress;
|
34 |
|
|
|
35 |
|
|
private String absoluteBase;
|
36 |
|
|
|
37 |
|
|
private boolean forceLocalAddress = false;
|
38 |
|
|
|
39 |
|
|
public String getBaseAddress() {
|
40 |
|
|
return baseAddress;
|
41 |
|
|
}
|
42 |
|
|
|
43 |
|
|
public void setBaseAddress(final String baseAddress) {
|
44 |
|
|
this.baseAddress = baseAddress;
|
45 |
|
|
}
|
46 |
|
|
|
47 |
|
|
@PostConstruct
|
48 |
|
|
public void init() throws URISyntaxException {
|
49 |
|
|
URI base = new URI(baseAddress);
|
50 |
|
|
log.info("base address: " + baseAddress);
|
51 |
|
|
|
52 |
|
|
this.absoluteBase = (new URI(base.getScheme(), base.getUserInfo(), base.getHost(), base.getPort(), null, null, null)).toString().trim();
|
53 |
|
|
log.info("absolute base address: " + absoluteBase);
|
54 |
|
|
}
|
55 |
|
|
|
56 |
|
|
/**
|
57 |
|
|
* {@inheritDoc}
|
58 |
|
|
*
|
59 |
|
|
* @see eu.dnetlib.soap.cxf.CxfEndpointReferenceBuilder#getAddress(org.apache.cxf.endpoint.Endpoint)
|
60 |
|
|
*/
|
61 |
|
|
@Override
|
62 |
|
|
public String getAddress(final Endpoint endpoint) {
|
63 |
|
|
final String address = super.getAddress(endpoint);
|
64 |
|
|
|
65 |
|
|
if (forceLocalAddress) {
|
66 |
|
|
try {
|
67 |
|
|
URI uri = new URI(address);
|
68 |
|
|
if (!address.startsWith("http://")) {
|
69 |
|
|
String res = baseAddress + uri.getPath();
|
70 |
|
|
if (log.isDebugEnabled()) {
|
71 |
|
|
log.debug("fixing address to: " + res);
|
72 |
|
|
}
|
73 |
|
|
return res;
|
74 |
|
|
}
|
75 |
|
|
String res = absoluteBase + uri.getPath();
|
76 |
|
|
if (log.isDebugEnabled()) {
|
77 |
|
|
log.debug("forcing address to: " + res);
|
78 |
|
|
}
|
79 |
|
|
return res;
|
80 |
|
|
} catch (URISyntaxException e) {
|
81 |
|
|
throw new IllegalArgumentException(e);
|
82 |
|
|
}
|
83 |
|
|
}
|
84 |
|
|
|
85 |
|
|
if (!address.startsWith("http://") && (baseAddress != null)) { return baseAddress + address; }
|
86 |
|
|
return address;
|
87 |
|
|
}
|
88 |
|
|
|
89 |
|
|
public boolean isForceLocalAddress() {
|
90 |
|
|
return forceLocalAddress;
|
91 |
|
|
}
|
92 |
|
|
|
93 |
|
|
@Required
|
94 |
|
|
public void setForceLocalAddress(final boolean forceLocalAddress) {
|
95 |
|
|
this.forceLocalAddress = forceLocalAddress;
|
96 |
|
|
}
|
97 |
|
|
}
|