A few months ago I started working on a project that requires the integration 
of OPC / UA to communicate with an automatic machine. Working with SpringBoot I 
looked for a library that was well integrated with this framework and in 
several posts and thesis I found Eclipse Milo, but in the version integrated 
with Apache Camel. Not knowing either Camel or Milo, I had to study both at 
least. Camel has a huge documentation, while the integration with Milo is 
limited to the parameterization and configuration of the Nodes to perform the 
reading and writing. That said it seems more than enough but in reality, since 
there are no specific examples, I had to search for posts several times to 
understand where I was wrong and clearly it took a lot of time. I find it 
normal to study and experiment but you know very well how urgent the deliveries 
we have as developers are and we don't always have free days to devote to 
research and testing. Now for example, I was able to run the reads and writes co
 rrectly while the function calls have a strange behavior, that is, every time 
I call the test function, the value that is returned to me is the parameter 
that I give in input, even if, enabling the TRACE on Camel and Milo I see that 
the function is called correctly and in the OutputArguments there is the result 
I expect but Camel keeps returning the InputArguments. It's certainly my 
mistake but I can't find anything to help me understand where I'm wrong. No 
example, no similar case, nothing at all, so I wondered if the choice I made is 
the right one and if someone can give me some advice because I don't know what 
else to try. 

Here the test simplified code I'm trying to do:
```
Variant[] params = new Variant[1];
params[0] = new Variant(13);

String  endpointUri = 
"milo-client:opc.tcp://milo.digitalpetri.com:62541/milo?node=RAW(ns=2;s=Methods)"&method=RAW(ns=2;s=Methods/sqrt(x))";
return producerTemplate.requestBody(endpointUri, params, "await", true, 
Variant.class);
```

The returned object is the same as I input, even if looking at the log I see 
that the function call is executed correctly:
```
 2021-mag-20 11:14:07.613 TRACE [milo-netty-event-loop-1] 
o.e.m.o.s.c.t.t.OpcTcpTransport - Write succeeded for request=PublishRequest, 
requestHandle=16
 2021-mag-20 11:14:07.598 DEBUG [milo-shared-thread-pool-1] 
o.a.c.c.m.c.i.SubscriptionManager - Call to node=ExpandedNodeId{ns=2, 
id=Methods, serverIndex=0}, method=ExpandedNodeId{ns=2, id=Methods/sqrt(x), 
serverIndex=0} = [Variant{value=13.0}]-> 
CallMethodResult{StatusCode=StatusCode{name=Good, value=0x00000000, 
quality=good}, InputArgumentResults=[StatusCode{name=Good, value=0x00000000, 
quality=good}], InputArgumentDiagnosticInfos=[], 
OutputArguments=[Variant{value=3.605551275463989}]}
```

This are my dependencies :
```
<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-spring-boot-starter</artifactId>
  <version>3.9.0</version>
</dependency>        
<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-milo-starter</artifactId>
  <version>3.9.0</version>
</dependency> 
```

Can someone help me? 
Many thanks

Reply via email to