Regarding (basic) authentication from annotated web client (@WebServiceClient) I added the following code:
JSR181ClientMetaDataBuilder.rebuildEndpointMetaData
// Process @CallProperties
if (wsClass.isAnnotationPresent(CallProperties.class))
processCallProperties(epMetaData, wsClass);
JSR181MetaDataBuilder
protected void processCallProperties(EndpointMetaData epMetaData, Class wsClass)
{
CallProperties callProperties = (CallProperties) wsClass.getAnnotation(CallProperties.class);
int length = callProperties.keys().length;
if (length > 0)
{
Properties properties = epMetaData.getProperties();
if (properties == null)
{
epMetaData.setProperties(new Properties());
}
}
if (length != callProperties.values().length)
{
throw new IllegalArgumentException("Different lenght of call properties: keys != values");
}
for(int i = 0; i < length; i++)
{
epMetaData.getProperties().setProperty(callProperties.keys(), callProperties.values());
}
}
@WebService
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
@CallProperties(
keys = {"javax.xml.rpc.security.auth.username", "javax.xml.rpc.security.auth.password"},
values = {"tomcat", "tomcat"}
)
public interface AccountService {
@WebMethod
@WebResult(name = "createAccountReturn")
Account createAccount(String username);
@WebMethod
@Oneway
void insertAccount(Account account);
}