Don't know whether you still need the info, but I found a solution:
(examples uses the sf wsdl, but can be applied in general)
{code}
Soap port = .....
SessionHeader sessionHeader = ......
// Sessionheader properties
QName xmlType = new QName( "urn:enterprise.soap.sforce.com","SessionHeader" );
QName xmlName = new QName( "urn:enterprise.soap.sforce.com","SessionHeader" );
Class<?> javaType = SessionHeader.class
// Register mapping
StubExt stub = (StubExt) port;
TypeMapping mapping = stub.getEndpointMetaData().getServiceMetaData().getTypeMapping();
AbstractSerializerFactory serFactory = new JAXBSerializerFactory();
AbstractDeserializerFactory deserFactory = new JAXBDeserializerFactory();
mapping.register( javaType, xmlType, serFactory, deserFactory );
// Add header to message
stub.addUnboundHeader( xmlName, xmlType, javaType, ParameterMode.IN );
stub.setUnboundHeaderValue( xmlName, this.sessionHeader );
{code}