diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/FormField.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/FormField.java
index 1b9b30bf3..df378978b 100644
--- a/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/FormField.java
+++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/FormField.java
@@ -113,7 +113,16 @@ public class FormField implements NamedElement {
}
}
+ /**
+ * Get a form field type from the given string. If string
is null, then null will be returned.
+ *
+ * @param string the string to transform or null.
+ * @return the type or null.
+ */
public static Type fromString(String string) {
+ if (string == null) {
+ return null;
+ }
switch (string) {
case "boolean":
return bool;
diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/provider/DataFormProvider.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/provider/DataFormProvider.java
index 2b52a4404..e94775d00 100644
--- a/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/provider/DataFormProvider.java
+++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/provider/DataFormProvider.java
@@ -94,12 +94,18 @@ public class DataFormProvider extends PacketExtensionProvider {
private FormField parseField(XmlPullParser parser) throws XmlPullParserException, IOException {
final int initialDepth = parser.getDepth();
- FormField formField = new FormField(parser.getAttributeValue("", "var"));
- formField.setLabel(parser.getAttributeValue("", "label"));
- String typeString = parser.getAttributeValue("", "type");
- if (typeString != null) {
- formField.setType(FormField.Type.fromString(typeString));
+ final String var = parser.getAttributeValue("", "var");
+ final FormField.Type type = FormField.Type.fromString(parser.getAttributeValue("", "type"));
+
+ final FormField formField;
+ if (type == FormField.Type.fixed) {
+ formField = new FormField();
+ } else {
+ formField = new FormField(var);
+ formField.setType(type);
}
+ formField.setLabel(parser.getAttributeValue("", "label"));
+
outerloop: while (true) {
int eventType = parser.next();
switch (eventType) {
diff --git a/smack-extensions/src/test/java/org/jivesoftware/smackx/xdata/packet/DataFormTest.java b/smack-extensions/src/test/java/org/jivesoftware/smackx/xdata/packet/DataFormTest.java
index 0424dd7db..6e52115f6 100644
--- a/smack-extensions/src/test/java/org/jivesoftware/smackx/xdata/packet/DataFormTest.java
+++ b/smack-extensions/src/test/java/org/jivesoftware/smackx/xdata/packet/DataFormTest.java
@@ -25,6 +25,7 @@ import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.packet.Element;
import org.jivesoftware.smack.util.PacketParserUtils;
import org.jivesoftware.smackx.xdata.FormField;
+import org.jivesoftware.smackx.xdata.FormField.Type;
import org.jivesoftware.smackx.xdata.provider.DataFormProvider;
import org.jivesoftware.smackx.xdatalayout.packet.DataLayout;
import org.jivesoftware.smackx.xdatalayout.packet.DataLayout.Fieldref;
@@ -32,7 +33,6 @@ import org.jivesoftware.smackx.xdatalayout.packet.DataLayout.Section;
import org.jivesoftware.smackx.xdatalayout.packet.DataLayout.Text;
import org.jivesoftware.smackx.xdatavalidation.packet.ValidateElement;
import org.jivesoftware.smackx.xdatavalidation.packet.ValidateElement.RangeValidateElement;
-
import org.junit.Test;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
@@ -48,6 +48,8 @@ public class DataFormTest {
private static final String TEST_OUTPUT_2 = "InstructionTest1PageText";
private static final String TEST_OUTPUT_3 = "InstructionTest1";
+ DataFormProvider pr = new DataFormProvider();
+
@Test
public void test() throws XmlPullParserException, IOException, SmackException {
//Build a Form
@@ -61,8 +63,6 @@ public class DataFormTest {
String output = df.toXML().toString();
assertEquals(TEST_OUTPUT_1, output);
- DataFormProvider pr = new DataFormProvider();
-
XmlPullParser parser = PacketParserUtils.getParserFor(output);
df = pr.parse(parser);
@@ -101,8 +101,6 @@ public class DataFormTest {
String output = df.toXML().toString();
assertEquals(TEST_OUTPUT_2, output);
- DataFormProvider pr = new DataFormProvider();
-
XmlPullParser parser = PacketParserUtils.getParserFor(output);
df = pr.parse(parser);
@@ -137,8 +135,6 @@ public class DataFormTest {
String output = df.toXML().toString();
assertEquals(TEST_OUTPUT_3, output);
- DataFormProvider pr = new DataFormProvider();
-
XmlPullParser parser = PacketParserUtils.getParserFor(output);
df = pr.parse(parser);
@@ -156,4 +152,11 @@ public class DataFormTest {
output = df.toXML().toString();
assertEquals(TEST_OUTPUT_3, output);
}
+
+ @Test
+ public void testFixedField() throws XmlPullParserException, IOException, SmackException {
+ final String formWithFixedField = "InstructionTest1";
+ DataForm df = pr.parse(PacketParserUtils.getParserFor(formWithFixedField));
+ assertEquals(Type.fixed, df.getFields().get(0).getType());
+ }
}