com.arjuna.webservices11.wsaddr.EndpointHelper Maven / Gradle / Ivy
package com.arjuna.webservices11.wsaddr;
import com.arjuna.webservices11.wsaddr.NativeEndpointReference;
import javax.xml.ws.EndpointReference;
import javax.xml.ws.wsaddressing.W3CEndpointReference;
import javax.xml.ws.WebServiceException;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import java.io.ByteArrayOutputStream;
import java.io.ByteArrayInputStream;
/**
* helper class to allow transformation of W3CEndpointreference instances to
* internal types which are not opaque
*/
public class EndpointHelper
{
public static T transform(Class clazz, EndpointReference epr)
{
assert epr != null;
if (clazz.isAssignableFrom(W3CEndpointReference.class))
{
if (epr instanceof W3CEndpointReference)
{
return (T)epr;
}
else if (epr instanceof NativeEndpointReference)
{
return (T)W3CEndpointReference.readFrom(getSourceFromEndpointReference(epr));
}
else
{
throw new WebServiceException("Unsupported EndpointReference: " + epr);
}
}
else if (clazz.isAssignableFrom(NativeEndpointReference.class))
{
return (T)NativeEndpointReference.readFrom(getSourceFromEndpointReference(epr));
}
//transformations from different types of EndpointReference could be supported in future...
throw new WebServiceException("EndpointReference of type " + clazz + " not supported.");
}
private static Source getSourceFromEndpointReference(EndpointReference epr)
{
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
StreamResult result = new StreamResult(outputStream);
epr.writeTo(result);
return new StreamSource(new ByteArrayInputStream(outputStream.toByteArray()));
}
}