James Smyth created AVRO-1549:
---------------------------------
Summary: Overlapping protocol names result in overwritten classes.
Key: AVRO-1549
URL: https://issues.apache.org/jira/browse/AVRO-1549
Project: Avro
Issue Type: Bug
Components: java
Reporter: James Smyth
Priority: Minor
If two .avdl files have the same 'protocol' name specified at the top, Java
code generation will only produce one of them, and ignore the other (or, I
would speculate, generates one, then overwrites it with the second one).
Example:
test1.avdl:
@namespace("my.example")
protocol example
{
void test();
}
test2.avdl:
@namespace("my.example")
protocol example
{
void testOverwrite();
}
Generates a Java class example.java:
package my.example;
@SuppressWarnings("all")
@org.apache.avro.specific.AvroGenerated
public interface example {
public static final org.apache.avro.Protocol PROTOCOL =
org.apache.avro.Protocol.parse("{\"protocol\":\"example\",\"namespace\":\"my.example\",\"types\":[],\"messages\":{\"testOverwrite\":{\"request\":[],\"response\":\"null\"}}}");
java.lang.Void testOverwrite() throws org.apache.avro.AvroRemoteException;
@SuppressWarnings("all")
public interface Callback extends example {
public static final org.apache.avro.Protocol PROTOCOL =
my.example.example.PROTOCOL;
void testOverwrite(org.apache.avro.ipc.Callback<java.lang.Void> callback)
throws java.io.IOException;
}
}
While the error may be clear here, I ran into an issue on my project born out
of this. We had an avdl file populated with methods that was importing another
avdl that was populated with common objects used by a number of other avdl
files. The included file had the same protocol name as the file that was
including it. This resulted in a Java class with no methods in it.
Being new to Avro, it took me quite a while to narrow down the cause, though
now it seems obvious. It would have been helpful if the code generation had
noticed the duplicate protocol name and thrown an error or least a warning.
--
This message was sent by Atlassian JIRA
(v6.2#6252)