Am 11.02.2011 00:32, schrieb George Niculae:
On Thu, Feb 10, 2011 at 5:15 PM, StephanDiplom
<[email protected]>  wrote:
Am 10.02.2011 13:53, schrieb George Niculae:
On Thu, Feb 10, 2011 at 1:52 PM, StephanDiplom
<[email protected]>    wrote:
Am 10.02.2011 12:27, schrieb George Niculae:
On Thu, Feb 10, 2011 at 12:47 PM, StephanDiplom

"2011-02-10T11:44:57.259000Z":3:JAVA:WARNING:sipx.ketelsen.iant.local:P1-15:00000000:LoggerListener:"Authentication
event AuthenticationSuccessEvent: superadmin; details:
org.acegisecurity.ui.WebAuthenticationDetails@b364: RemoteIpAddress:
141.41.40.142; SessionId: 1q03ektws6g9r"

but the SOAP-response says:

<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
<soapenv:Body>
<soapenv:Fault>
<faultcode>soapenv:Server.userException</faultcode>
<faultstring>java.lang.NullPointerException</faultstring>
<detail>
<ns1:hostname

xmlns:ns1="http://xml.apache.org/axis/";>sipx.ketelsen.iant.local</ns1:hostname>
</detail>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>
You hit NPE at m_bridge.getSettings(); line because  m_bridge is null.
You should load the bridge based on the hostname where you want the
conference to be created.

My advice is to send the hostname where you want the conf to be
created in ConferenceData (update sipxconfig.wsdl, add yet another
element).
Inject ConferenceBridgeContext in SystemServiceImpl (by adding
setConferenceBridgeContext method and adding a new property to the
SystemService bean inside services-servlet.xml file -<property
name="conferenceBridgeContext" ref="conferenceBridgeContext" />).
In SystemServiceImpl.createConference:
- create a new conf by calling ConferenceBridgeContext.newConference()
- instead instantiating / initializing a conference and set the unique
id
- load the bridge using
ConferenceBridgeContext.getBridgeByServer(String hostname) and set it
on conference (conference.setBridge(Bridge))
- set name, description, extension, owner received in ConferenceData
(as you already did)
- save conference by calling ConferenceBridgeContext.store(Conference)
(mind that even you'll see the conference in admin UI, it won't be
active until you issue a reload on FS service)

Also, it would be better to create a new Conference Service instead
using the System Service for saving conferences...

George
_______________________________________________
sipx-dev mailing list
[email protected]
List Archive: http://list.sipfoundry.org/archive/sipx-dev/
Ok, I created a new ConferenceBridgeService and put the create and delete service in there.

How do I reload the FS service? I found something like FreeswitchApi.reloadxml() but what is my serviceUri to initialize the FreeswitchApi (if this is the right way)?

I would also like to display the Participant Access Code in my SOAP-response after creating a new conference. So i tried:
conference.generateAccessCodes();
and
conference.getParticipantAccessCode();
to return it. I also get a 4 digit access code but I cannot see it in the standard web interface.

I added my patch.

Regards
Stephan


>From b30d38a6e99c097b59e4e788bd14c020ed7709a0 Mon Sep 17 00:00:00 2001
From: sipxchange <[email protected]>
Date: Tue, 15 Feb 2011 12:51:20 +0100
Subject: [PATCH] ConferenceBridgeService

---
 .../web/context/WEB-INF/services-servlet.xml       |    6 +
 .../api/ConferenceBridgeServiceImpl.java           |   60 ++++++++
 .../sipxconfig/api/SystemServiceImpl.java          |   53 +-------
 .../org/sipfoundry/sipxconfig/api/sipxconfig.wsdl  |  151 +++++++++++---------
 4 files changed, 151 insertions(+), 119 deletions(-)
 create mode 100644 
sipXconfig/web/src/org/sipfoundry/sipxconfig/api/ConferenceBridgeServiceImpl.java

diff --git a/sipXconfig/web/context/WEB-INF/services-servlet.xml 
b/sipXconfig/web/context/WEB-INF/services-servlet.xml
index 4500451..786d49c 100644
--- a/sipXconfig/web/context/WEB-INF/services-servlet.xml
+++ b/sipXconfig/web/context/WEB-INF/services-servlet.xml
@@ -7,6 +7,11 @@
     <property name="callGroupContext" ref="callGroupContext" />
     <property name="callGroupBuilder" ref="callGroupBuilder" />
   </bean>
+  
+  <bean id="ConferenceBridgeService" 
class="org.sipfoundry.sipxconfig.api.ConferenceBridgeServiceImpl">
+    <property name="conferenceBridgeContext" ref="conferenceBridgeContext" />
+    <property name="coreContext" ref="coreContext" />
+  </bean>
 
   <bean id="ParkOrbitService" 
class="org.sipfoundry.sipxconfig.api.ParkOrbitServiceImpl">
     <property name="parkOrbitContext" ref="parkOrbitContext" />
@@ -38,6 +43,7 @@
   <bean id="SystemService" 
class="org.sipfoundry.sipxconfig.api.SystemServiceImpl">
     <property name="domainManager" ref="domainManager" />
     <property name="coreContext" ref="coreContext" />
+    <property name="ldapImportManager" ref="ldapImportManager" />
   </bean>
 
   <bean id="callGroupBuilder" 
class="org.sipfoundry.sipxconfig.api.CallGroupBuilder">
diff --git 
a/sipXconfig/web/src/org/sipfoundry/sipxconfig/api/ConferenceBridgeServiceImpl.java
 
b/sipXconfig/web/src/org/sipfoundry/sipxconfig/api/ConferenceBridgeServiceImpl.java
new file mode 100644
index 0000000..2ec3160
--- /dev/null
+++ 
b/sipXconfig/web/src/org/sipfoundry/sipxconfig/api/ConferenceBridgeServiceImpl.java
@@ -0,0 +1,60 @@
+package org.sipfoundry.sipxconfig.api;
+
+import java.rmi.RemoteException;
+import java.util.Collections;
+import java.util.List;
+
+import org.sipfoundry.sipxconfig.common.CoreContext;
+import org.sipfoundry.sipxconfig.conference.Conference;
+import org.sipfoundry.sipxconfig.conference.ConferenceBridgeContext;
+import org.springframework.dao.support.DataAccessUtils;
+
+public class ConferenceBridgeServiceImpl implements ConferenceBridgeService {
+    private ConferenceBridgeContext m_conferenceBridgeContext;
+    private CoreContext m_coreContext;
+
+    public void setConferenceBridgeContext(ConferenceBridgeContext 
conferenceBridgeContext) {
+        m_conferenceBridgeContext = conferenceBridgeContext;
+    }
+
+    public void setCoreContext(CoreContext coreContext) {
+        m_coreContext = coreContext;
+    }
+
+    public DeleteConferenceResponse 
deleteConferenceByExtension(ConferenceExtension extension) throws 
RemoteException {
+        DeleteConferenceResponse response = new DeleteConferenceResponse();
+        Conference conference = new Conference();
+        String ext = extension.getExtension();
+        String success = "success";
+        try{    
+            List<Conference> conferences = 
m_conferenceBridgeContext.searchConferences(ext);
+            conference = (Conference) 
DataAccessUtils.singleResult(conferences);
+            
m_conferenceBridgeContext.removeConferences(Collections.singleton(new 
Integer(conference.getId())));
+        }catch(Exception e){
+           success = "No conference with such extension";
+        }
+        response.setResponse(success);
+        return response;
+    }
+
+    public CreateConferenceResponse createConference(ConferenceData conf) 
throws RemoteException {
+        CreateConferenceResponse response = new CreateConferenceResponse();
+        String success = "success";
+        Conference conference = m_conferenceBridgeContext.newConference();
+        conference.initialize();
+        
conference.setBridge(m_conferenceBridgeContext.getBridgeByServer(conf.getHostName()));
+        conference.setName(conf.getName());
+        conference.setExtension(conf.getExtension());
+        conference.setDescription(conf.getDescription());
+        
conference.setOwner(m_coreContext.loadUserByUserNameOrAlias(conf.getUserNameOrAlias()));
+        conference.setSettingValue(Conference.MAX_LEGS, "0");
+        conference.setSettingValue(Conference.AUTO_RECORDING, "1");
+        conference.generateAccessCodes();
+        success += " - Participant Access Code is: " + 
conference.getParticipantAccessCode();
+        m_conferenceBridgeContext.store(conference);
+
+        response.setResponse(success);
+
+        return response;
+    }
+}
diff --git 
a/sipXconfig/web/src/org/sipfoundry/sipxconfig/api/SystemServiceImpl.java 
b/sipXconfig/web/src/org/sipfoundry/sipxconfig/api/SystemServiceImpl.java
index e902dc7..9d89c33 100644
--- a/sipXconfig/web/src/org/sipfoundry/sipxconfig/api/SystemServiceImpl.java
+++ b/sipXconfig/web/src/org/sipfoundry/sipxconfig/api/SystemServiceImpl.java
@@ -10,23 +10,15 @@
 package org.sipfoundry.sipxconfig.api;
 
 import java.rmi.RemoteException;
-import java.util.Collections;
-import java.util.List;
 
 import org.sipfoundry.sipxconfig.bulk.ldap.LdapImportManager;
 import org.sipfoundry.sipxconfig.common.CoreContext;
-import org.sipfoundry.sipxconfig.conference.Bridge;
-import org.sipfoundry.sipxconfig.conference.Conference;
-import org.sipfoundry.sipxconfig.conference.ConferenceBridgeContext;
 import org.sipfoundry.sipxconfig.domain.DomainManager;
-import org.springframework.dao.support.DataAccessUtils;
 
 public class SystemServiceImpl implements SystemService {
     private DomainManager m_domainManager;
     private CoreContext m_coreContext;
     private LdapImportManager m_ldapImportManager;
-    private ConferenceBridgeContext m_conferenceBridgeContext;
-    private Bridge m_bridge;
     private final ApiBeanBuilder m_builder = new SystemInfoBuilder();
 
 
@@ -43,14 +35,6 @@ public class SystemServiceImpl implements SystemService {
         m_ldapImportManager = ldapImportManager;
     }
 
-    public void setConferenceBridgeContext(ConferenceBridgeContext 
conferenceBridgeContext) {
-        m_conferenceBridgeContext = conferenceBridgeContext;
-    }
-
-    public void setBridge(Bridge bridge) {
-        m_bridge = bridge;
-    }
-
     public SystemInfo systemInfo() throws RemoteException {
         SystemInfo info = new SystemInfo();
         org.sipfoundry.sipxconfig.domain.Domain domain = 
m_domainManager.getDomain();
@@ -63,44 +47,13 @@ public class SystemServiceImpl implements SystemService {
     }
 
     public LdapResponse importLDAP(ImportLDAP data) throws RemoteException {
-        LdapResponse response = new LdapResponse();
+        LdapResponse debug = new LdapResponse();
         String success = "success";
-        response.setResponse(success);
+        debug.setResponse(success);
         m_ldapImportManager.insert();
-        return response;
+        return debug;
     }
 
-    public DeleteConferenceResponse 
deleteConferenceByExtension(ConferenceExtension extension) throws 
RemoteException {
-        DeleteConferenceResponse response = new DeleteConferenceResponse();
-        Conference conference = new Conference();
-        String ext = extension.getExtension();
-        String success = "success";
-        List<Conference> conferences = 
m_conferenceBridgeContext.searchConferences(ext);
-        conference = (Conference) DataAccessUtils.singleResult(conferences);
-        m_conferenceBridgeContext.removeConferences(Collections.singleton(new 
Integer(conference.getId())));
-        response.setResponse(success);
-        return response;
-    }
 
-    public CreateConferenceResponse createConference(ConferenceData conf) 
throws RemoteException {
-        CreateConferenceResponse response = new CreateConferenceResponse();
-        String success = "success";
-        m_bridge.getSettings();
-        Conference conference = new Conference();
-        conference.initialize();
-        conference.getSettings();
-        conference.setName(conf.getName());
-        conference.setExtension(conf.getExtension());
-        conference.setDescription(conf.getDescription());
-        
conference.setOwner(m_coreContext.loadUserByUserNameOrAlias(conf.getUserNameOrAlias()));
-        conference.setSettingValue(Conference.MAX_LEGS, "0");
-        conference.setSettingValue(Conference.AUTO_RECORDING, "1");
-        conference.setUniqueId();
-        response.setResponse(success);
-        
-        m_bridge.addConference(conference);
-        
-        return response;
-    }
 
 }
diff --git a/sipXconfig/web/src/org/sipfoundry/sipxconfig/api/sipxconfig.wsdl 
b/sipXconfig/web/src/org/sipfoundry/sipxconfig/api/sipxconfig.wsdl
index 37b3d2d..d3e001d 100644
--- a/sipXconfig/web/src/org/sipfoundry/sipxconfig/api/sipxconfig.wsdl
+++ b/sipXconfig/web/src/org/sipfoundry/sipxconfig/api/sipxconfig.wsdl
@@ -216,6 +216,40 @@
           </xsd:sequence>
         </xsd:complexType>
       </xsd:element>
+
+      <!-- C O N F E R E N C E   B R I D G E -->
+      <xsd:element name="ConferenceExtension">
+        <xsd:complexType>
+          <xsd:sequence>
+            <xsd:element name="extension" type="xsd:string" minOccurs="1" 
maxOccurs="1" />
+          </xsd:sequence>
+        </xsd:complexType>
+      </xsd:element>
+      <xsd:element name="DeleteConferenceResponse">
+        <xsd:complexType>
+          <xsd:sequence>
+            <xsd:element name="response" type="xsd:string" minOccurs="1" 
maxOccurs="1" />
+          </xsd:sequence>
+        </xsd:complexType>
+      </xsd:element>
+      <xsd:element name="CreateConferenceResponse">
+        <xsd:complexType>
+          <xsd:sequence>
+            <xsd:element name="response" type="xsd:string" minOccurs="1" 
maxOccurs="1" />
+          </xsd:sequence>
+        </xsd:complexType>
+      </xsd:element>
+      <xsd:element name="ConferenceData">
+        <xsd:complexType>
+          <xsd:sequence>
+            <xsd:element name="name" type="xsd:string" minOccurs="1" 
maxOccurs="1" />
+            <xsd:element name="extension" type="xsd:string" minOccurs="1" 
maxOccurs="1" />
+            <xsd:element name="hostName" type="xsd:string" minOccurs="1" 
maxOccurs="1" />
+            <xsd:element name="description" type="xsd:string" minOccurs="0" 
maxOccurs="1" />
+            <xsd:element name="userNameOrAlias" type="xsd:string" 
minOccurs="0" maxOccurs="1" />
+          </xsd:sequence>
+        </xsd:complexType>
+      </xsd:element>
       
       <!-- P A R K   O R B I T -->
       <xsd:element name="GetParkOrbitsResponse">
@@ -369,37 +403,6 @@
           </xsd:sequence>
         </xsd:complexType>
       </xsd:element>
-      <xsd:element name="ConferenceExtension">
-        <xsd:complexType>
-          <xsd:sequence>
-            <xsd:element name="extension" type="xsd:string" minOccurs="1" 
maxOccurs="1" />
-          </xsd:sequence>
-        </xsd:complexType>
-      </xsd:element>
-      <xsd:element name="DeleteConferenceResponse">
-        <xsd:complexType>
-          <xsd:sequence>
-            <xsd:element name="response" type="xsd:string" minOccurs="1" 
maxOccurs="1" />
-          </xsd:sequence>
-        </xsd:complexType>
-      </xsd:element>
-      <xsd:element name="CreateConferenceResponse">
-        <xsd:complexType>
-          <xsd:sequence>
-            <xsd:element name="response" type="xsd:string" minOccurs="1" 
maxOccurs="1" />
-          </xsd:sequence>
-        </xsd:complexType>
-      </xsd:element>
-      <xsd:element name="ConferenceData">
-        <xsd:complexType>
-          <xsd:sequence>
-            <xsd:element name="name" type="xsd:string" minOccurs="1" 
maxOccurs="1" />
-            <xsd:element name="extension" type="xsd:string" minOccurs="1" 
maxOccurs="1" />
-            <xsd:element name="description" type="xsd:string" minOccurs="0" 
maxOccurs="1" />
-            <xsd:element name="userNameOrAlias" type="xsd:string" 
minOccurs="0" maxOccurs="1" />
-          </xsd:sequence>
-        </xsd:complexType>
-      </xsd:element>
 
 
       <!-- T E S T -->
@@ -469,6 +472,51 @@
   </binding>
 
   <!-- C O N F E R E N C E   B R I D G E   S E R V I C E -->
+  <message name="deleteConferenceByExtensionResponse" >
+    <part name="deleteConferenceResponse" 
element="tns:DeleteConferenceResponse" />
+  </message>
+  <message name="deleteConferenceByExtensionRequest" >
+    <part name="conferenceExtension" element="tns:ConferenceExtension" />
+  </message>
+  <message name="createConferenceResponse" >
+    <part name="createConferenceResponse" 
element="tns:CreateConferenceResponse" />
+  </message>
+  <message name="createConferenceRequest" >
+    <part name="conferenceData" element="tns:ConferenceData" />
+  </message>
+  <portType name="ConferenceBridgeService">
+    <documentation> </documentation>
+    <operation name="deleteConferenceByExtension">
+      <input message="tns:deleteConferenceByExtensionRequest" />
+      <output message="tns:deleteConferenceByExtensionResponse" />
+    </operation>
+    <operation name="createConference">
+      <input message="tns:createConferenceRequest" />
+      <output message="tns:createConferenceResponse" />
+    </operation>
+  </portType>
+
+  <binding name="ConferenceBridgeServiceSoapBinding" 
type="tns:ConferenceBridgeService">
+    <soapbind:binding style="document" 
transport="http://schemas.xmlsoap.org/soap/http"; />
+    <operation name="deleteConferenceByExtension">
+      <soapbind:operation />
+      <input>
+        <soapbind:body use="literal" />
+      </input>
+      <output>
+        <soapbind:body use="literal" />
+      </output>
+    </operation>
+    <operation name="createConference">
+      <soapbind:operation />
+      <input>
+        <soapbind:body use="literal" />
+      </input>
+      <output>
+        <soapbind:body use="literal" />
+      </output>
+    </operation>
+  </binding>
 
 
   <!-- P A R K   O R B I T   S E R V I C E -->
@@ -749,18 +797,6 @@
   <message name="importLDAPRequest" >
     <part name="importLDAP" element="tns:ImportLDAP" />
   </message>
-  <message name="deleteConferenceByExtensionResponse" >
-    <part name="deleteConferenceResponse" 
element="tns:DeleteConferenceResponse" />
-  </message>
-  <message name="deleteConferenceByExtensionRequest" >
-    <part name="conferenceExtension" element="tns:ConferenceExtension" />
-  </message>
-  <message name="createConferenceResponse" >
-    <part name="createConferenceResponse" 
element="tns:CreateConferenceResponse" />
-  </message>
-  <message name="createConferenceRequest" >
-    <part name="conferenceData" element="tns:ConferenceData" />
-  </message>
   <portType name="SystemService">
     <documentation>System related information and functions</documentation>
     <operation name="systemInfo">
@@ -771,14 +807,6 @@
       <input message="tns:importLDAPRequest" />
       <output message="tns:importLDAPResponse" />
     </operation>
-    <operation name="deleteConferenceByExtension">
-      <input message="tns:deleteConferenceByExtensionRequest" />
-      <output message="tns:deleteConferenceByExtensionResponse" />
-    </operation>
-    <operation name="createConference">
-      <input message="tns:createConferenceRequest" />
-      <output message="tns:createConferenceResponse" />
-    </operation>
   </portType>
 
   <binding name="SystemServiceSoapBinding" type="tns:SystemService">
@@ -801,24 +829,6 @@
         <soapbind:body use="literal" />
       </output>
     </operation>
-    <operation name="deleteConferenceByExtension">
-      <soapbind:operation />
-      <input>
-        <soapbind:body use="literal" />
-      </input>
-      <output>
-        <soapbind:body use="literal" />
-      </output>
-    </operation>
-    <operation name="createConference">
-      <soapbind:operation />
-      <input>
-        <soapbind:body use="literal" />
-      </input>
-      <output>
-        <soapbind:body use="literal" />
-      </output>
-    </operation>
   </binding>
 
   <!-- S E R V I C E S -->
@@ -826,6 +836,9 @@
     <port name="CallGroupService" binding="tns:CallGroupServiceSoapBinding">
       <soapbind:address 
location="http://localhost:9999/sipxconfig/services/CallGroupService"; />
     </port>
+    <port name="ConferenceBridgeService" 
binding="tns:ConferenceBridgeServiceSoapBinding">
+      <soapbind:address 
location="http://localhost:9999/sipxconfig/services/ConferenceBridgeService"; />
+    </port>
     <port name="ParkOrbitService" binding="tns:ParkOrbitServiceSoapBinding">
       <soapbind:address 
location="http://localhost:9999/sipxconfig/services/ParkOrbitService"; />
     </port>
-- 
1.7.3.5

_______________________________________________
sipx-dev mailing list
[email protected]
List Archive: http://list.sipfoundry.org/archive/sipx-dev/

Reply via email to