Skip to content

Commit 297dbe6

Browse files
adding the possibility to use extra headers (#17)
1 parent 9a864ea commit 297dbe6

8 files changed

Lines changed: 140 additions & 30 deletions

File tree

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,7 @@ Then launch the client :
4141
```console
4242
java -jar ./target/etpproto-java-[PROJECT_VERSION]-jar-with-dependencies.jar ws://[YOUR_DOMAIN]:[YOUR_PORT]/[SUB_PATH]/ [LOGIN] [PASSWORD]
4343
```
44+
45+
46+
# TODO:
47+
Add the possibility to add a header value during websocket establishement : For OSDU it necessary to add in the header the "data-partition-id"

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<groupId>com.geosiris</groupId>
55
<artifactId>etpproto-java</artifactId>
66
<name>${project.groupId}:${project.artifactId}</name>
7-
<version>1.0.4</version>
7+
<version>1.0.5</version>
88
<organization>
99
<name>Geosiris</name>
1010
<url>http://www.geosiris.com</url>

src/example/com/geosiris/etp/example/Main.java

Lines changed: 42 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,18 @@
1818
import Energistics.Etp.v12.Datatypes.*;
1919
import Energistics.Etp.v12.Datatypes.DataArrayTypes.DataArray;
2020
import Energistics.Etp.v12.Datatypes.Object.ContextScopeKind;
21-
import Energistics.Etp.v12.Protocol.DataArray.PutDataArrays;
2221
import Energistics.Etp.v12.Protocol.DataArray.PutDataArraysResponse;
22+
import Energistics.Etp.v12.Protocol.Dataspace.GetDataspaces;
2323
import com.geosiris.etp.communication.ClientInfo;
2424
import com.geosiris.etp.communication.ConnectionType;
2525
import com.geosiris.etp.communication.ETPConnection;
2626
import com.geosiris.etp.communication.Message;
2727
import com.geosiris.etp.protocols.CommunicationProtocol;
2828
import com.geosiris.etp.protocols.ProtocolHandler;
29-
import com.geosiris.etp.protocols.handlers.generated.*;
29+
import com.geosiris.etp.protocols.handlers.generated.CoreHandler_DefaultPrinter;
30+
import com.geosiris.etp.protocols.handlers.generated.DataArrayHandler_DefaultPrinter;
31+
import com.geosiris.etp.protocols.handlers.generated.DiscoveryHandler_DefaultPrinter;
32+
import com.geosiris.etp.protocols.handlers.generated.StoreHandler_DefaultPrinter;
3033
import com.geosiris.etp.utils.ETPHelper;
3134
import com.geosiris.etp.utils.ETPHelperREST;
3235
import com.geosiris.etp.utils.ETPUri;
@@ -40,6 +43,8 @@
4043
import java.io.ObjectOutputStream;
4144
import java.util.*;
4245

46+
import static com.geosiris.etp.utils.ETPHelperREST.getResources;
47+
4348
public class Main {
4449
public static Logger logger = LogManager.getLogger(Main.class);
4550
public static String file1 = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
@@ -66,9 +71,23 @@ public static void main(String[] args) throws Exception {
6671
// test_big_messagePUTREST(args);
6772
// test_get_big_data_array_REST(args);
6873
// putDA_REST(args);
69-
putDA_split(args);
74+
// putDA_split(args);
75+
test_external_server(args);
7076
}
7177

78+
public static void test_external_server(String[] args) throws Exception {
79+
HashMap<String, String> map = new HashMap<>();
80+
map.put("data-partition-id", "osdu");
81+
82+
ETPClient client = getClient(1<<22, args, map);
83+
logger.info(ETPHelper.sendGetRessources_pretty(client, 1, ContextScopeKind.sourcesOrSelf, 5000));
84+
// long msg_id = client.send(new GetDataspaces());
85+
// for(Message msg: client.getEtpClientSession().waitForResponse(msg_id, 5000)){
86+
// logger.info(msg);
87+
// }
88+
89+
client.closeClient();
90+
}
7291

7392
public static void putDA_REST(String[] args) throws Exception {
7493
AnyArray aa_points = ETPHelper.constructArray(List.of(0,1,2,3,4,5));
@@ -106,10 +125,8 @@ public static void putDA_split(String[] args) throws Exception {
106125
logger.info("{}", ETPHelperREST.getMultipleDataArrays(args[0], uri, List.of(pathInRes)));
107126
}
108127

109-
110-
111128
public static void test_get_resources(String[] args) throws Exception {
112-
logger.info(ETPHelperREST.getResources(args[0], new ETPUri("volve-eqn-plus").toString(), ContextScopeKind.self));
129+
logger.info(getResources(args[0], new ETPUri("volve-eqn-plus").toString(), ContextScopeKind.self));
113130
}
114131

115132
public static void test_get_dataspaces(String[] args) throws Exception {
@@ -356,10 +373,15 @@ public static ETPClient getClient(String[] args){
356373
}
357374

358375
public static ETPClient getClient(Integer maxMsgSize, String[] args){
376+
return getClient(maxMsgSize, args, new HashMap<>());
377+
}
378+
379+
public static ETPClient getClient(Integer maxMsgSize, String[] args, Map<String, String> headers){
380+
ETPClient etpClient = null;
359381
logger.info("Usage : java -jar myfile.jar [SERVER_URL] [LOGIN] [PASSWORD]");
360382

361383
HttpURI etpServerUri = null;
362-
String login = "";
384+
String loginOrToken = "";
363385
String password = "";
364386

365387
if (args.length > 0) {
@@ -371,7 +393,7 @@ public static ETPClient getClient(Integer maxMsgSize, String[] args){
371393
}
372394
if (args.length > 1) {
373395
try {
374-
login = args[1];
396+
loginOrToken = args[1];
375397
} catch (Exception e) {
376398
e.printStackTrace();
377399
}
@@ -382,9 +404,20 @@ public static ETPClient getClient(Integer maxMsgSize, String[] args){
382404
} catch (Exception e) {
383405
e.printStackTrace();
384406
}
407+
etpClient = ETPClient.getInstanceWithAuth_Basic(etpServerUri, getConnection(etpServerUri), 2000, loginOrToken, password, maxMsgSize, headers);
408+
}else{
409+
etpClient = ETPClient.getInstanceWithAuth_Token(etpServerUri, getConnection(etpServerUri), 2000, loginOrToken, maxMsgSize, headers);
385410
}
411+
412+
logger.info(etpServerUri);
413+
414+
return etpClient;
415+
}
416+
417+
public static ETPConnection getConnection(HttpURI etpServerUri){
386418
Map<CharSequence, DataValue> mapCaps = new HashMap<>();
387419

420+
388421
ServerCapabilities caps = new ServerCapabilities();
389422
caps.setEndpointCapabilities(mapCaps);
390423

@@ -400,12 +433,7 @@ public static ETPClient getClient(Integer maxMsgSize, String[] args){
400433
// .setContactInformation(Contact.newBuilder().setContactEmail("").setContactName("Val").setContactPhone("").build())
401434
// .build();
402435

403-
ETPConnection etpConnection = new ETPConnection(ConnectionType.CLIENT, caps, clientInfo, protocolHandlers);
404-
405-
ETPClient etpClient = ETPClient.getInstanceWithAuth_Basic(etpServerUri, etpConnection, 2000, login, password, maxMsgSize);
406-
logger.info(etpServerUri);
407-
408-
return etpClient;
436+
return new ETPConnection(ConnectionType.CLIENT, caps, clientInfo, protocolHandlers);
409437
}
410438

411439
public static void etpClientTest2(String args[]) {

src/main/java/com/geosiris/etp/communication/ETPConnection.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@
1515
*/
1616
package com.geosiris.etp.communication;
1717

18+
import Energistics.Etp.v12.Datatypes.DataValue;
1819
import Energistics.Etp.v12.Datatypes.ServerCapabilities;
20+
import Energistics.Etp.v12.Datatypes.SupportedProtocol;
21+
import Energistics.Etp.v12.Datatypes.Version;
1922
import Energistics.Etp.v12.Protocol.Core.Acknowledge;
2023
import Energistics.Etp.v12.Protocol.Core.CloseSession;
2124
import Energistics.Etp.v12.Protocol.Core.OpenSession;
@@ -46,6 +49,9 @@ public class ETPConnection {
4649
public ETPConnection(ConnectionType connectionType, ServerCapabilities serverCapabilities, ClientInfo clientInfo, Map<CommunicationProtocol, ProtocolHandler> protocolHandlers){
4750
this.connectionType = connectionType;
4851
this.serverCapabilities = serverCapabilities;
52+
if(serverCapabilities.getSupportedProtocols() == null || serverCapabilities.getSupportedProtocols().isEmpty()){
53+
serverCapabilities.setSupportedProtocols(computeSupportedProtocols(protocolHandlers));
54+
}
4955
this.clientInfo = clientInfo;
5056
this.protocolHandlers = protocolHandlers;
5157

@@ -148,6 +154,20 @@ public List<Message> _handleMessage(Message etpInputMsg){
148154
return result;
149155
}
150156

157+
public static List<SupportedProtocol> computeSupportedProtocols(Map<CommunicationProtocol, ProtocolHandler> protocolHandlers){
158+
List<SupportedProtocol> supported = new ArrayList<>();
159+
for(Map.Entry<CommunicationProtocol, ProtocolHandler> ph: protocolHandlers.entrySet()){
160+
supported.add(new SupportedProtocol(
161+
ph.getKey().id,
162+
new Version(),
163+
"store",
164+
new HashMap<>()
165+
));
166+
}
167+
168+
return supported;
169+
}
170+
151171
public Collection<byte[]> sendMsg(Collection<Message> msgs) {
152172
Collection<byte[]> result = new ArrayList<>();
153173

src/main/java/com/geosiris/etp/communication/Message.java

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -212,17 +212,29 @@ public Message(byte[] msg) {
212212

213213
// BODY
214214
Class<? extends SpecificRecordBase> etpObjClass = (Class<? extends SpecificRecordBase>) ProtocolsUtility.getEtpClassFromIds(this.header.getProtocol(), this.header.getMessageType());
215-
logger.debug("OBJ CLASS : " + etpObjClass);
216-
assert etpObjClass != null;
217-
this.body = etpObjClass.getConstructor().newInstance();
218-
ProtocolsUtility.decode(this.body, dec);
219215

220-
if(this.body == null){
221-
Decoder dec2 = DecoderFactory.get().binaryDecoder(msg, null);
222-
headerReader.read(this.header, dec2);
223-
this.body = new ProtocolException();
216+
if(etpObjClass == null){
217+
// try with protocol 0 Core for protocolExceptions
218+
etpObjClass = (Class<? extends SpecificRecordBase>) ProtocolsUtility.getEtpClassFromIds(0, this.header.getMessageType());
219+
if(etpObjClass != null){
220+
this.header.setProtocol(0);
221+
}
222+
}
223+
224+
if(etpObjClass != null) {
225+
logger.debug("OBJ CLASS : " + etpObjClass);
226+
assert etpObjClass != null;
227+
this.body = etpObjClass.getConstructor().newInstance();
224228
ProtocolsUtility.decode(this.body, dec);
225229

230+
if (this.body == null) {
231+
Decoder dec2 = DecoderFactory.get().binaryDecoder(msg, null);
232+
headerReader.read(this.header, dec2);
233+
this.body = new ProtocolException();
234+
ProtocolsUtility.decode(this.body, dec);
235+
}
236+
}else{
237+
logger.error("No class found for protocol " + this.header.getProtocol() + " and type " + this.header.getMessageType());
226238
}
227239
} catch (Exception e) { logger.error(e.getMessage()); logger.debug(e.getMessage(), e); }
228240
}

src/main/java/com/geosiris/etp/protocols/handlers/generated/CoreHandler_DefaultPrinter.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package com.geosiris.etp.protocols.handlers.generated;
1717

1818
import Energistics.Etp.v12.Datatypes.MessageHeader;
19+
import Energistics.Etp.v12.Datatypes.SupportedProtocol;
1920
import Energistics.Etp.v12.Protocol.Core.*;
2021
import com.geosiris.etp.communication.ClientInfo;
2122
import com.geosiris.etp.communication.Message;
@@ -55,6 +56,9 @@ public Collection<Message> on_CloseSession(CloseSession msg, MessageHeader msgHe
5556
@Override
5657
public Collection<Message> on_OpenSession(OpenSession msg, MessageHeader msgHeader, ClientInfo clientInfo) {
5758
logger.info("[CoreHandler_DefaultPrinter] received message" + msg);
59+
for(SupportedProtocol sp: msg.getSupportedProtocols()){
60+
logger.info("\tProtocol " + sp.getProtocol() + " is supported in version " + sp.getProtocolVersion());
61+
}
5862
return new ArrayList<>();
5963
}
6064

src/main/java/com/geosiris/etp/utils/ETPUri.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ public String toString(){
152152

153153
}
154154

155-
if(hasCollectionDomain() && hasDomainVersion()){
155+
if(hasCollectionDomain() && hasCollectionDomainVersion()){
156156
res.append("/").append(collectionDomain).append(collectionDomainVersion);
157157
if(hasCollectionDomainType())
158158
res.append(".").append(collectionDomainType);

src/main/java/com/geosiris/etp/websocket/ETPClient.java

Lines changed: 48 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,13 @@
4141
public class ETPClient extends WebSocketAdapter implements Runnable, AutoCloseable{
4242
public static final Logger logger = LogManager.getLogger(ETPClient.class);
4343

44+
45+
46+
// TODO: autoriser d'ajouter un header pour pouvoir inclure les data-partition-id sinon pas de connexion avec OSDU
47+
48+
49+
50+
4451
public static int MAX_PAYLOAD_SIZE = 1 << 20;
4552
private static MessageEncoding encoding = MessageEncoding.BINARY;
4653

@@ -73,26 +80,57 @@ public final static ETPClient getInstanceWithAuth_Basic(HttpURI url, ETPConnecti
7380
return getInstanceWithAuth_Basic(url, etpConnection, connexionTimeout, userName, password, MAX_PAYLOAD_SIZE);
7481
}
7582

83+
public final static ETPClient getInstanceWithAuth_Basic(HttpURI url, ETPConnection etpConnection, int connexionTimeout, String userName, String password, Map<String, String> headers){
84+
return getInstanceWithAuth_Basic(url, etpConnection, connexionTimeout, userName, password, MAX_PAYLOAD_SIZE, headers);
85+
}
86+
7687
public final static ETPClient getInstanceWithAuth_Basic(HttpURI url, ETPConnection etpConnection, int connexionTimeout, String userName, String password, Integer maxMsgSize){
88+
return getInstanceWithAuth_Basic(url, etpConnection, connexionTimeout, userName, password, maxMsgSize, new HashMap<>());
89+
}
90+
91+
public final static ETPClient getInstanceWithAuth_Basic(HttpURI url, ETPConnection etpConnection, int connexionTimeout, String userName, String password, Integer maxMsgSize, Map<String, String> headers){
7792
String auth = null;
7893
if (!userName.isEmpty()) {
7994
String userpass = userName + ":" + password;
8095
auth = "Basic " + new String(Base64.getEncoder().encode(userpass.getBytes())).trim();
8196
}
82-
return getInstance(url, etpConnection, connexionTimeout, auth, maxMsgSize);
97+
return getInstance(url, etpConnection, connexionTimeout, auth, maxMsgSize, headers);
8398
}
8499

85-
86100
public final static ETPClient getInstanceWithAuth_Token(HttpURI url, ETPConnection etpConnection, int connexionTimeout, String token){
87101
return getInstanceWithAuth_Token(url, etpConnection, connexionTimeout, token, MAX_PAYLOAD_SIZE);
88102
}
89103

104+
public final static ETPClient getInstanceWithAuth_Token(HttpURI url, ETPConnection etpConnection, int connexionTimeout, String token, Map<String, String> headers){
105+
return getInstanceWithAuth_Token(url, etpConnection, connexionTimeout, token, MAX_PAYLOAD_SIZE, headers);
106+
}
107+
90108
public final static ETPClient getInstanceWithAuth_Token(HttpURI url, ETPConnection etpConnection, int connexionTimeout, String token, Integer maxMsgSize){
91109
return getInstance(url, etpConnection, connexionTimeout, "Bearer " + token, maxMsgSize);
92110
}
93111

94-
public final static ETPClient getInstance(HttpURI serverUri, ETPConnection etpConnection, int connexionTimeout, String auth_basic_or_bearer,
95-
Integer maxMsgSize){
112+
public final static ETPClient getInstanceWithAuth_Token(HttpURI url, ETPConnection etpConnection, int connexionTimeout, String token, Integer maxMsgSize, Map<String, String> headers){
113+
return getInstance(url, etpConnection, connexionTimeout, "Bearer " + token, maxMsgSize, headers);
114+
}
115+
116+
public final static ETPClient getInstance(
117+
HttpURI serverUri,
118+
ETPConnection etpConnection,
119+
int connexionTimeout,
120+
String auth_basic_or_bearer,
121+
Integer maxMsgSize
122+
){
123+
return getInstance(serverUri, etpConnection, connexionTimeout, auth_basic_or_bearer, maxMsgSize, new HashMap<>());
124+
}
125+
126+
public final static ETPClient getInstance(
127+
HttpURI serverUri,
128+
ETPConnection etpConnection,
129+
int connexionTimeout,
130+
String auth_basic_or_bearer,
131+
Integer maxMsgSize,
132+
Map<String, String> headers
133+
){
96134
if(maxMsgSize == null){
97135
maxMsgSize = MAX_PAYLOAD_SIZE;
98136
}
@@ -105,7 +143,6 @@ public final static ETPClient getInstance(HttpURI serverUri, ETPConnection etpCo
105143
// etpClient.wsclient.setMaxTextMessageBufferSize(maxMsgSize);
106144
etpClient.wsclient.setMaxBinaryMessageBufferSize(maxMsgSize);
107145

108-
109146
// etpClient.wsclient = new WebSocketClient(new SslContextFactory());
110147

111148
logger.debug(serverUri);
@@ -117,7 +154,12 @@ public final static ETPClient getInstance(HttpURI serverUri, ETPConnection etpCo
117154
// etpClient.wsclient.setMaxTextMessageBufferSize((int) etpClient.maxByteSizePerMessage);
118155
ClientUpgradeRequest request = new ClientUpgradeRequest();
119156

120-
if (auth_basic_or_bearer!=null && !auth_basic_or_bearer.isEmpty()) {
157+
158+
for(Map.Entry<String, String> e: headers.entrySet()){
159+
request.setHeader(e.getKey(), e.getValue());
160+
}
161+
162+
if (auth_basic_or_bearer != null && !auth_basic_or_bearer.isEmpty()) {
121163
request.setHeader("Authorization", auth_basic_or_bearer);
122164
logger.debug(request.getHeader("Authorization"));
123165
}

0 commit comments

Comments
 (0)