2016-03-30 55 views
0
aşağıdaki ek açıklamaları kullanarak Weblogic 12c bir webservice dağıtmak çalışıyorum

ile bir webcoder içinde @Stateless kullanımı: Ben tanımlamak için bir web.xml kullanıyorumNameAlreadyBoundException eğer web.xml

@SchemaValidation 
@BindingType(javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING) 
@WebService(serviceName = "xxxxx", 
     targetNamespace = "http://bla/BusinessServices/yyy/xxxxx/V1", 
     wsdlLocation = "META-INF/wsdl/zzz/yyy/xxxxx/V1/xxxxxConcrete.wsdl", 
     portName = "xxxxxPort", 
     endpointInterface = "ble.businessservices.yyy.xxxxx.v1.xxxxx") 
//@Transactional(value= Transactional.TransactionFlowType.SUPPORTS, version= Transactional.Version.WSAT12) 
@Stateless 
@SecurityPolicies(@SecurityPolicy(uri = "my_policy")) 
@DeclareRoles("my-role") 
@Interceptors({InterceptorClass1.class, InterceptorClass2.class, InterceptorClass3.class}) 
public class xxxxxV1 extends HttpServlet implements xxxxx {...} 

kullanmak istediğiniz içerik kökünü tanımlamak için sunucu takma adı ve bir weblogic.xml dosyası. Öte yandan

Target state: deploy failed on Server services_server 
javax.naming.NameAlreadyBoundException: my-webservice-name-impl-1.0.0.0-SNAPSHOT.war#MyWebServiceName is already bound; remaining name 'app/wsee' 
    at weblogic.deploy.api.tools.deployer.Jsr88Operation.report(Jsr88Operation.java:547) 
    at weblogic.deploy.api.tools.deployer.Deployer.perform(Deployer.java:140) 
    at weblogic.deploy.api.tools.deployer.Deployer.runBody(Deployer.java:88) 
    at weblogic.utils.compiler.Tool.run(Tool.java:158) 
    at weblogic.utils.compiler.Tool.run(Tool.java:115) 
    at weblogic.Deployer.run(Deployer.java:74) 
    ... 15 more 

Ben web.xml silerseniz, ben hatasız dağıtabilir ama:

Sorun @Stateless ek açıklama bırakırsanız aşağıdaki özel durum alıyorum dağıtırken, bir tabi ki web servisimin URL'si tanımlamak istediğim adres değil:/portName/serviceName URL'sini kullanır. Ben @Stateless ek açıklamayı silerseniz

Ve ben gerekli URL almak, ama önleyicilerin mantıksal olarak kabul edilemez olduğu, göz ardı edilir.

@Transactional ek açıklamasını kullanmayı denedim (yukarıdaki yorum koduna bakın), ancak aralıklar göz ardı edilmeye devam ediyor.

Kaybettiklerim hakkında bir fikri olan var mı? İdeal olarak, web.xml ve @Transactional kullanırım ve önleyicilere girerim.

Hepinize teşekkürler!

cevap

0

Her şeyin gerektiği gibi çalışmasını sağlamak için bir geçici çözüm bulundu: the delegation pattern.

webservice sınıfı şimdi aşağıdaki ek açıklamalar etti:

@SchemaValidation 
@BindingType(javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING) 
@WebService(serviceName = "xxxxx", 
     targetNamespace = "http://bla/BusinessServices/yyy/xxxxx/V1", 
     wsdlLocation = "META-INF/wsdl/zzz/yyy/xxxxx/V1/xxxxxConcrete.wsdl", 
     portName = "xxxxxPort", 
     endpointInterface = "ble.businessservices.yyy.xxxxx.v1.xxxxx") 
@Transactional(value= Transactional.TransactionFlowType.SUPPORTS, version= Transactional.Version.WSAT12) 
@SecurityPolicies(@SecurityPolicy(uri = "my_policy")) 
public class xxxxxV1 extends HttpServlet implements xxxxx {...} 

Sonra aşağıdaki ek açıklamalarla bir temsilci sınıfı xxxxxV1Delegate kullanın:

@Stateless 
@DeclareRoles("my-role") 
@Interceptors({InterceptorClass1.class, InterceptorClass2.class, InterceptorClass3.class}) 
public class xxxxxV1Delegate {...} 

tüm uygulama yapılır Bu sınıfta (temelde kopya webservice sınıfında bulunan ve @Override s) nolu öğenin doldurulmasını sağlama

Webservice sınıfı, t xxxxxV1Delegate ve tüm @Override yöntemlerini içerir. Her yöntem, temsilci sınıfında tam olarak aynı yöntemi çağırır.