com.fasterxml.jackson.dataformat.xml.util.StaxUtil Maven / Gradle / Ivy
Show all versions of swagger-all Show documentation
package com.fasterxml.jackson.dataformat.xml.util;
import java.io.IOException;
import javax.xml.stream.*;
public class StaxUtil
{
/**
* Adapter method used when only IOExceptions are declared to be thrown, but
* a {@link XMLStreamException} was caught.
*
* Note: dummy type variable is used for convenience, to allow caller to claim
* that this method returns result of any necessary type.
*/
public static T throwXmlAsIOException(XMLStreamException e) throws IOException
{
Throwable t = e;
while (t.getCause() != null) {
t = t.getCause();
}
if (t instanceof Error) throw (Error) t;
if (t instanceof RuntimeException) throw (RuntimeException) t;
throw new IOException(t);
}
/**
* Since XML names can not contain all characters JSON names can, we may
* need to replace characters. Let's start with trivial replacement of
* ASCII characters that can not be included.
*/
public static String sanitizeXmlTypeName(String name)
{
StringBuilder sb;
int changes = 0;
// First things first: remove array types' trailing[]...
if (name.endsWith("[]")) {
do {
name = name.substring(0, name.length() - 2);
++changes;
} while (name.endsWith("[]"));
sb = new StringBuilder(name);
// do trivial pluralization attempt
if (name.endsWith("s")) {
sb.append("es");
} else {
sb.append('s');
}
} else {
sb = new StringBuilder(name);
}
for (int i = 0, len = name.length(); i < len; ++i) {
char c = name.charAt(i);
if (c > 127) continue;
if (c >= 'a' && c <= 'z') continue;
if (c >= 'A' && c <= 'Z') continue;
if (c >= '0' && c <= '9') continue;
if (c == '_' || c == '.' || c == '-') continue;
// Ok, need to replace
++changes;
if (c == '$') {
sb.setCharAt(i, '.');
} else {
sb.setCharAt(i, '_');
}
}
if (changes == 0) {
return name;
}
return sb.toString();
}
}